code này được gọi ctor khác nếu thuộc một ctor:Vấn đề về nhà thầu ủy quyền - Có an toàn không?
#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;
}
Kết quả là:
ctor2
ctor1
1
dtor
2
dtor
Có vẻ như các thành viên biến f
phá hủy hai lần ở đây, là nó rồi?
Ngoài ra để trả lời Anton, tôi không thấy lý do tại sao "ctor2" đang được in ra. Tôi nghĩ rằng điều này nên được ctor1 http://coliru.stacked-crooked.com/a/bc8d4be86a5ccebf – user2950911
@ user2950911 Xin lỗi, tôi bối rối phiên bản của mã. Mã đã được sửa. – songyuanyao