【发布时间】:2020-10-17 14:49:04
【问题描述】:
我有以下代码:
在 Game.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,我该如何解决这个问题?
有没有办法在初始化列表中抛出异常?
【问题讨论】:
-
如果可以的话,将检查移到
mtm::Dimensions的构造函数中。解决您的问题,并且似乎是验证尺寸的更合乎逻辑的地方。 -
我做不到 @user4581301
-
Rats.How 添加一个辅助函数来执行检查并返回
height和width的乘积。board(height * width, nullptr)变为board(helper(height, width), nullptr) -
@user4581301 并且该辅助函数返回 IllegalArgument?听起来不错,但有没有办法在没有辅助功能的情况下做到这一点? (听说可以)
-
附言。你可以使用宏gcc.godbolt.org/z/HZqAFL