当使用析构函数时,释放或损坏
这个问题在这里已经有了答案:
这是因为当你在向量中推送元素时,你创建了元素的拷贝,但是vtx没有在拷贝上被复制,所以在main()的末尾,你将有三个元素指向相同的vtx。 当程序终止时,它们三个都会尝试删除相同的int数组。
将elm[0]
添加到vec
, elm[0]
副本将存储在vec
。 由于您尚未定义复制构造函数,因此编译器使用默认值 - 它通过成员复制执行成员。 在这种情况下,它会保留指针vtx
的副本。 现在你有三个对象指向相同的内存。
当vec
被破坏时,它会在这些对象中的两个上调用析构函数。 他们每个尝试delete
相同的指针。 因此错误。
如果你想避免这样的错误,请检查三条规则。
链接地址: http://www.djcxy.com/p/73177.html