为什么析构函数比构造函数被调用更多? [复制]

2023-11-26

在以下代码中,析构函数被调用两次,而构造函数仅被调用一次:

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);也没有改变任何东西。


它最初是使用之间的隐式转换运算符构建的TFoo and CFoo, CFoo(TFoo f),然后使用该临时对象将其传递给push_back使用默认的复制构造函数或移动构造函数构造容器中的对象,具体取决于您是否使用 C++11(不显示任何内容)。然后临时对象被销毁,最后容器中的对象(以及容器本身)被销毁。

你可以看到here or here(C++11) 甚至更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么析构函数比构造函数被调用更多? [复制] 的相关文章