为什么被破坏的对象比创建的更多[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么被破坏的对象比创建的更多[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我是c ++的新手,并试图学习复制值或传递引用的成本,在我的例子中,我发现虽然一段代码对我来说很难理解:

考虑这个例子:

struct Foo {

    Foo(int x) :
            internVal { x } {
        std::cout << "Con: " << std::endl;
    }
    ~Foo() {
        std::cout << "Des: " << std::endl;
    }
    int getVal() const {
        return internVal;
}
private:
    int internVal { 0 };
};

现在我做的时候:

int main(int argc, char **argv) {

    {
        Foo a { 111 };
        Foo b { 6555 };
        Foo c { -444 };
        std::cout << " Foos created..." << std::endl;
        std::vector<Foo> vector_Test { };
        vector_Test.push_back(a);
        vector_Test.push_back(b);
        vector_Test.push_back(c);
        std::cout << " Foos added..." << std::endl;

        for (const auto& d : vector_Test) {
            std::cout << "-----" << d.getVal() << "-----" << std::endl;
        }
        std::cout << " Foos printed..." << std::endl;
    }
    std::cout << " Foos out of scope..." << std::endl;
    std::cout << "end!" << std::endl;

    //
    return 0;
}

我看到以下输出:

Con: 
Con: 
Con: 
 Foos created...
Des: 
Des: 
Des: 
 Foos added...
-----111-----
-----6555-----
------444-----
 Foos printed...
Des: 
Des: 
Des: 
Des: 
Des: 
Des: 
 Foos out of scope...
end!

所以我的问题为什么更多的对象被破坏了?

我期待一个偶数...如果我直接/间接创建3个对象然后销毁3个对象

我某处有内存泄漏吗?

谢谢

Ps:我的编译器是MinGW

答案

当您执行vector_Test.push_back(a);时,您正在向矢量添加实例的副本。

这意味着稍后这些副本和原始元素将被销毁。

以上是关于为什么被破坏的对象比创建的更多[重复]的主要内容,如果未能解决你的问题,请参考以下文章

当键有点字符时,对象会被破坏[重复]。

来自 C++ 的回调 python 函数,对象被破坏

将对象的指针提供给构造函数会导致对象被破坏[重复]

被替换的片段不会被破坏

活动在片段上出现的权限对话框中被破坏

ViewPager 片段随着时间的推移而被破坏?