【发布时间】:2014-11-15 01:07:15
【问题描述】:
我遇到了 std::swap 的问题。我必须交换一个对象。该对象在其析构函数中释放内存。我编写了一个移动构造函数和一个将指针复制到该内存的移动赋值运算符。默认构造函数将该指针设置为 NULL。
当然,我有一个常规的复制构造函数和赋值操作符,但是它们分配和复制内存,这显然不是我想要的交换操作。
当我调用 std::swap 时,它会使用我的移动构造函数从 _Left 创建一个临时对象。然后,它使用我的移动赋值运算符将 _Right 移动到 _Left,最后将 temp 对象移动到 _Right。
当你到达 std::swap 的底部时,这一切看起来都很好。但是,当您离开它的底部时,临时对象的析构函数会运行,从而释放 _Right 对象期望拥有的内存。
通常接受的方法是什么?我希望避免编写交换函数,因为这是移动构造函数/移动赋值运算符的重点。我必须使用自己的 swap() 来避免这种情况吗?
【问题讨论】:
-
展示你的实现。
-
向我们展示您的 move 特殊成员函数实现比写几段关于该问题的段落要容易得多。无论如何,听起来你没有将源对象中的指针设置为
nullptr。