这个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
在这里被摧毁了两次,是吗?
答案 0 :(得分:8)
下面
Foo(int i) { Foo(); cout << "2\n"; }
您没有使用委托构造函数。你正在做的是在构造函数体中创建Foo
的临时实例(并立即销毁它)。
委托构造函数的正确语法是
Foo(int i) : Foo() { cout << "2\n"; }