委托构造函数问题 - 它是否安全?

时间:2015-07-01 08:07:24

标签: c++ constructor

这个code在一个ctor中调用另一个ctor:

#include <iostream>
using namespace std;

class F {
public:
    F() { cout << "ctor1\n"; }
    F(int) { cout << "ctor2\n"; }
    ~F() { cout << "dtor\n"; }
};
class Foo {
    F f;
public:
    Foo() : f() { cout << "1\n"; }
    Foo(int i) : f(i) { Foo(); cout << "2\n"; }
};

int main() {
    Foo object(1); 
    return 0;
}

结果是:

ctor2
ctor1
1
dtor
2
dtor

似乎成员变量f在这里被摧毁了两次,是吗?

1 个答案:

答案 0 :(得分:8)

下面

Foo(int i) { Foo(); cout << "2\n"; }

您没有使用委托构造函数。你正在做的是在构造函数体中创建Foo的临时实例(并立即销毁它)。

委托构造函数的正确语法是

Foo(int i) : Foo() { cout << "2\n"; }
相关问题