为什么析构函数被调用的次数比构造函数多?
Why is the destructor called more than the constructor?
在下面的代码中,析构函数被调用了两次,而构造函数只被调用了一次:
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);
}
代码输出:
hi c'tor2
bye
bye
我发现了一个类似的question,其中提到了复制构造函数,所以我添加了它们,但结果相同。取消注释行 //v.assign(1, VAL1);
也不会改变任何内容。
在下面的代码中,析构函数被调用了两次,而构造函数只被调用了一次:
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);
}
代码输出:
hi c'tor2 bye bye
我发现了一个类似的question,其中提到了复制构造函数,所以我添加了它们,但结果相同。取消注释行 //v.assign(1, VAL1);
也不会改变任何内容。