c++ - 为什么被破坏的对象比创建的多

标签 c++ constructor destructor

<分区>

我是 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:我的编译器是MinWG

最佳答案

当您执行 vector_Test.push_back(a); 时,您正在将实例的拷贝添加到 vector 中。

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

关于c++ - 为什么被破坏的对象比创建的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49115960/

相关文章:

c++ - 我们可以在显示 wxtreelistctrl 时隐藏 1/2 列吗?

c++ - 如何生成具有指数分布(均值)的随机数?

c++ - unique_ptr 删除器导致我的程序崩溃

c++ - 为什么我们需要 C++ 中的纯虚拟析构函数?

javascript - 什么时候适合在 REACT 中使用构造函数?

c++ - 调用析构函数会显式地完全销毁对象吗?

c++ - 通过更改窗口大小获得不同的标题大小

c++ - 带有初始化列表的空构造函数是否被认为是微不足道的?

c++ - 如何在嵌套列表初始化中从 map<> 中辨别 vector<>?

c++ - 这行得通吗? C++ 多重继承和构造函数链接