下面的代码:
在游戏h中:
mtm::Dimensions dimensions;
std::vector<std::shared_ptr<Character>> board;
在Game. cpp中:
Game::Game(int height, int width) : dimensions(height, width), board(height * width, nullptr)
{
if (height <= 0 || width <= 0) {
throw mtm::IllegalArgument();
}
}
但是你可能注意到我抛出错误太晚了,如果height * width
小于0,那么bad_alloc将被抛出而不是IllegalArgument
,我该如何修复这个错误?
有没有办法在初始化列表中抛出异常?
3条答案
按热度按时间3pvhb19x1#
如果您无法在
mtm::Dimensions
中执行检查,它确实应该在那里,您可以使用一个helper函数:或者使用
unsigned
,或者使用deikduxw2#
您可以首先捕获在构造
board
时抛出的bad_alloc
,然后抛出您自己的自定义异常:下面是另一个(更好的)答案,这是基于你自己在评论中的建议:
这是一个demo。
2fjabf4q3#
插入一个辅助函数以验证
height
和width
。