c++ - 使用对象的浅拷贝时出现双重释放错误......如何解决?

标签 c++ object copy delete-operator

如何从浅复制对象与原始对象中删除双重(删除)错误。

一个简单的例子:

class INT
{
   int *p; //dynamic.

   //define here fancy constructors etc.
   set(int i){ p=new int; p=i;}
   ~INT();
}

INT::~INT()
{
   if(p) delete p;
}

void somefunction(INT a)
{
   //done some stuff ,e.g. call some display function
}
//note here, that a destructor will be called, and a.p will vanish.

int main(void)
{
   INT a; a.set(2);
   somefunction(a);//shallow copy
}
//CRASH BOOM BOOM!

我想要一个通用的解决方案,因为传递对象是一件微不足道的事情,而像这样天真的事情,导致可怕/可怕的错误只是“很棒”。

我怀疑有很多解决方法(其中一些我什至能想到),但我很好奇是否有任何通用(几乎所有地方都适用)的方法来解决这个问题?

最佳答案

每当你的类中有一个指针对象时,你需要声明你自己的复制构造函数和赋值运算符方法来避免浅拷贝问题。 看吃这个link有关这方面的更多信息

关于c++ - 使用对象的浅拷贝时出现双重释放错误......如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268342/

相关文章:

引用自身的 C++ 模板类

c++ - "uFlags &= ~CHN_PANNING"命令有什么作用?

javascript - 访问私有(private)静态对象和方法

c# - 确定对象是否已在 C# 中被销毁(即不再在任何地方找到)

java - 我想检查一个对象的所有值集是否都为空

javascript - Zclip 仅打开单击类/从下一个元素复制

c++ - 使 boost::python::range 接受...一个 boost::range

c++ - C++ 打印除数函数的新功能

python - 如何将文件复制到 Python 脚本中的特定文件夹?

batch-file - COPY命令-.BAT文件中的STDERR重定向导致意外结果