2

参考这篇 MSDN 文章,最后(部分:鲁棒编程)指出,

为防止资源泄漏,请始终在移动赋值运算符中释放资源(例如内存、文件句柄和套接字)。

如果将移动分配改为实现为:

MemoryBlock& operator=(MemoryBlock&& other)
{
   if (this != &other)
   {
      std::swap(_data, other._data);
      std::swap(_length, other._length);
   }
   return *this;
}

当“其他”引用超出范围时,不会释放右值的“_data”吗?

4

1 回答 1

1

是的,other._data当它超出范围时将被释放(当然假设是一个好的析构函数)。但是有一个项目需要考虑:如果other._data指的是需要及时销毁的资源,它可能会在此设计的后期被销毁。一个例子可能是互斥锁的锁定状态。

于 2011-03-16T14:27:43.773 回答