当使用析构函数时,释放或损坏

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

  • 动态分配一个对象数组7个答案
  • 什么是三项规则? 8个答案

  • 这是因为当你在向量中推送元素时,你创建了元素的拷贝,但是vtx没有在拷贝上被复制,所以在main()的末尾,你将有三个元素指向相同的vtx。 当程序终止时,它们三个都会尝试删除相同的int数组。


    elm[0]添加到vecelm[0]副本将存储在vec 。 由于您尚未定义复制构造函数,因此编译器使用默认值 - 它通过成员复制执行成员。 在这种情况下,它会保留指针vtx的副本。 现在你有三个对象指向相同的内存。

    vec被破坏时,它会在这些对象中的两个上调用析构函数。 他们每个尝试delete相同的指针。 因此错误。

    如果你想避免这样的错误,请检查三条规则。

    链接地址: http://www.djcxy.com/p/73177.html

    上一篇: Double free or corruption when using destructor

    下一篇: When to use overloaded assignment operator?