C++ getter(按值)方法的异常安全保证是什么?
对于下面的示例类,getter方法的保证是什么 这样的getter方法是否提供了最低限度的有力保证 按值返回基本类型是否总是提供无抛出保证C++ getter(按值)方法的异常安全保证是什么?,c++,exception,exception-safety,C++,Exception,Exception Safety,对于下面的示例类,getter方法的保证是什么 这样的getter方法是否提供了最低限度的有力保证 按值返回基本类型是否总是提供无抛出保证 class Foo { public: // TODO: Constructor // Getter methods int getA() const { return a; } std::string getB() const { return b; } std::vector<int> getC()
class Foo
{
public:
// TODO: Constructor
// Getter methods
int getA() const { return a; }
std::string getB() const { return b; }
std::vector<int> getC() const { return c; }
Bar getD() const { return d; }
std::vector<Bar> getE() const { return e; }
protected:
int a;
std::string b;
std::vector<int> c;
Bar d;
std::vector<Bar> e;
}
class-Foo
{
公众:
//TODO:构造函数
//吸气剂法
int getA()常量{return a;}
std::string getB()常量{return b;}
std::vector getC()常量{return c;}
Bar getD()常量{return d;}
std::vector getE()常量{return e;}
受保护的:
INTA;
std::字符串b;
std::向量c;
棒d;
std::载体e;
}
根本无法保证异常安全
例如,getA()
如果未初始化a
,则可能会引发异常(或者由于行为未定义,因此执行其他操作)。某些芯片(如安腾)在读取统一化变量时会发出信号
如果内存不足,
getC()
可能会抛出std::bad\u alloc
。同上getB()
、getD()
和getE()
我认为您的所有操作都满足强异常安全性,前提是条(const-Bar&)
复制构造函数是强安全的。此外,getA
将满足nothrow保证,前提是a
已初始化,例如在构造函数中
这些const
方法不会修改Foo
的任何部分,因此主要关注的是新创建的vector
s的泄漏-如果将c
或e
中的成员复制到返回值时出现异常,则应自动解除分配这些属性
a
必须正确初始化的原因是,复制未初始化的数据可能会引发诸如安腾之类的体系结构,如中所述。即使getB是no,但它可能引发bad_alloc。FyiI了解您对getA()
所说的内容-为了永远不抛出,我需要确保构造函数(包括复制和移动)始终初始化a
。然而,如果任何getter抛出一个异常,这不会被归类为一个强保证,因为类的状态没有被修改吗?