【问题标题】:why are more destroyed objects than created [duplicate]为什么被破坏的对象比创建的对象多[重复]
【发布时间】:2018-03-06 01:18:45
【问题描述】:

我是 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

【问题讨论】:

  • 因为您没有检测所有可能的构造函数。
  • 有一个你没有考虑到的隐式复制构造函数。
  • 哦...这是一个很好的...复制构造函数肯定丢失了
  • 添加复制构造函数并记录

标签: c++ constructor destructor


【解决方案1】:

当您执行vector_Test.push_back(a); 时,您将实例的副本添加到向量中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2020-03-05
    • 2016-09-09
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多