Trong đoạn mã sau, destructor được gọi là hai lần, trong khi các nhà xây dựng được gọi là một lần duy nhất:Tại sao hàm hủy được gọi nhiều hơn hàm tạo?
enum TFoo
{
VAL1,
VAL2
};
class CFoo
{
public:
TFoo mf;
CFoo()
{
cout<<"hi c'tor1\n";
//mf = f;
}
CFoo(TFoo f)
{
cout<<"hi c'tor2\n";
mf = f;
}
CFoo(TFoo &f)
{
cout<<"hi c'tor3\n";
mf = f;
}
~CFoo()
{
cout<<"bye\n";
}
};
int main()
{
vector<CFoo> v;
//v.assign(1, VAL1);
v.push_back(VAL1);
}
Các đầu ra mã:
hi c'tor2 bye bye
Tôi tìm thấy một tương tự question, mà đã đề cập đến các nhà xây dựng sao chép, vì vậy tôi đã thêm chúng, nhưng với cùng một kết quả. Bỏ ghi chú dòng //v.assign(1, VAL1);
cũng không thay đổi bất kỳ thứ gì.
bạn bỏ lỡ hàm tạo bản sao 'CFoo (const CFoo &)' – Jarod42