使用复制分配操作员进行深度复制时,我们是否始终需要释放内存?

时间:2016-06-09 09:01:17

标签: c++ deep-copy

这可能是一个愚蠢的问题,但出于好奇我还是会问这个问题。

在我看到的大多数示例中,总是声明我们需要在需要深度复制时在复制赋值运算符的定义中释放然后重新分配内存。但情况总是这样吗?如果在默认构造函数中指针成员变量已经分配了内存怎么办?只需指定/覆盖指针指向的值就可以了:

Foo& Foo::operator =(const Foo& obj)
{
   *(this->ptr) = *(obj.ptr);

   return *this;
}

而不是这个

Foo& Foo::operator =(const Foo& obj)
{
   delete this->ptr;
   this->ptr = new int;
   *(this->ptr) = *(obj.ptr);

   return *this;
}

如果这被认为是不好的做法,请你解释并展示一个例子为什么会这样。

0 个答案:

没有答案