C++ 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()

对于下面的示例类,getter方法的保证是什么

这样的getter方法是否提供了最低限度的有力保证

按值返回基本类型是否总是提供无抛出保证

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抛出一个异常,这不会被归类为一个强保证,因为类的状态没有被修改吗?