我正在查看一些我继承下来的代码,其中有一个矩阵类在C++中实现了2D矩阵并拥有移动构造函数和赋值运算符。
现在,我不确定为什么数据指针在这里被交换了。我认为应该是这样的:
它的实现方式如下:
template<typename T, int rows, int cols>
class matrix_data {
...
std::unique_ptr<T[]> data_;
// Some definitions
typedef matrix_data<T, rows, cols> this_type
matrix_data(this_type && other)
{
std::swap(data_, other.data_);
}
};
现在,我不确定为什么数据指针在这里被交换了。我认为应该是这样的:
data_ = std::move(other.data_);
我猜想使用swap还可以,因为other
实例在移动后应该已经处于无效状态了。
我的问题是,我能否用data_ = std::move(other.data_);
来替换这个语句?是否有一些unique_ptr
的删除操作导致必须使用交换而不是移动呢,即如果我执行移动操作,原始数据是否会被正确删除?
matrix_data(this_type && other) = default;
。使用std::swap
没有意义,它会做更多的工作。 - juanchopanza...
部分包含其他构造函数,这是相当可能的,你将必须明确要求移动构造函数(但可以使用= default
版本)。 - Bo Persson