【发布时间】:2018-08-07 07:26:21
【问题描述】:
我不喜欢像下面这样具有 IsValid() 函数的类,因为您必须记住在任何地方都检查 IsValid():
struct BadTextWidget
{
BadTextWidget(const std::string & TEXT) : m_text(TEXT) {}
bool IsValid() const;
...
我更喜欢 RAII 方法,它使得无法构造无效对象:
struct BetterTextWidget
{
BetterTextWidget(const std::string & TEXT) : m_text(TEXT)
{
if (IsValid(m_text) == false) throw std::invalid_argument("...");
}
...
但是,我也喜欢使用向量,但这需要构造函数参数具有无效的默认值。这迫使我再次使用 BadTextWidget。
那么,如何使用抛出的验证构造函数获得 std::vector 的性能特征?你如何解决这个设计难题?我错过了什么?
【问题讨论】:
-
std::vector不需要为其保存的项目使用默认构造函数。 -
".. 但这要求构造函数参数具有无效的默认值。这迫使我再次使用 BadTextWidget。"你能扩展一下吗?不清楚这是从哪里来的。
-
您错误地假设
std::vector需要默认构造函数参数,所以也许这就是您遇到这个难题的原因。
标签: c++ exception constructor throw raii