这段代码是否符合我的预期?意思是,在构造函数体执行之前或之后调用的handle_(curl_easy_init())部分是什么?
class oauth2 {
public:
oauth2() : handle_(curl_easy_init()) {
if (handle_ == NULL) {
throw new runtime_error("curl_easy_init return null");
}
}
~oauth2() {
curl_easy_cleanup(handle_);
}
private:
CURL * handle_;
};
由于
答案 0 :(得分:3)
是之前或之后调用的handle_(curl_easy_init())部分 构造函数体执行?
在执行构造函数体之前调用它。
C ++标准版n3337 § 12.6.2.10:
在非委托构造函数中,初始化继续进行 以下顺序:
- 首先,仅适用于最多的构造函数 派生类(1.8),虚拟基类按顺序初始化 它们出现在深度优先的从左到右的遍历中 基类的非循环图,其中“从左到右”是基数的顺序 派生类中基类的外观 基本符列表。
- 然后,在中初始化直接基类 声明顺序,因为它们出现在base-specifier-list中 (不管mem-initializers的顺序如何)。
- 然后,非静态 数据成员按照在其中声明的顺序进行初始化 类定义(再次无论顺序如何 MEM-初始化)。
- 最后,复合声明了 构造函数体被执行。
此摘录中的委托构造函数被定义为一个构造函数,它调用同一个类的另一个构造函数(因此它委托作业)。在这种情况下,前者称为主要构造函数,而后者称为目标构造函数。
答案 1 :(得分:2)
是
在包含对象之前构造成员对象。