C++11 使用移动构造函数重置

C++11 使用移动构造函数重置,c++11,C++11,我在读有关move构造函数的文章,试图学习C++11,它说 move构造函数重置源指针rhs.data。这边 当临时文件被销毁时,删除[]将无害地应用 指向空指针 现在作者做了这样的事情 MemoryPage(MemoryPage&& other): size(0), buf(nullptr) { // pilfer other’s resource size=other.size; buf=other.buf; // reset other oth

我在读有关move构造函数的文章,试图学习C++11,它说

move构造函数重置源指针rhs.data。这边 当临时文件被销毁时,删除[]将无害地应用 指向空指针

现在作者做了这样的事情

MemoryPage(MemoryPage&& other): size(0), buf(nullptr)
{
   // pilfer other’s resource
   size=other.size;
   buf=other.buf;
   // reset other
   other.size=0;
   other.buf=nullptr;
}
我的问题是,如果other.buf实际上是一个指针,不是吗

delete other.buf;
delete other.buf;
为什么我们只是在重置过程中为其分配nullptr?它不会最终成为内存泄漏吗

我的问题是,如果
other.buf
实际上是一个指针,不是吗

delete other.buf;
delete other.buf;
否,因为前面的一行将指针复制到
this->buf

移动构造函数正在从
其他
对象获取任何内存缓冲区,并确保
其他
将被安全销毁

下面很好地描述了移动构造函数的实际操作:

右值引用,也称为“移动构造/分配”,是一种有用的方法 表示从对象构造或赋值的方式 这将不再用于任何其他用途,包括: 例如,一个临时对象-这样你就可以经常得到一个像样的 通过简单地窃取其他对象的内脏来提高性能 而不是制作一个潜在的昂贵的深度拷贝

所以这一行:

buf=other.buf;
实际上是“偷取另一个物体的内脏”。另一个物体不再需要它们,它很快就会消失

我的问题是,如果
other.buf
实际上是一个指针,不是吗

delete other.buf;
delete other.buf;
否,因为前面的一行将指针复制到
this->buf

移动构造函数正在从
其他
对象获取任何内存缓冲区,并确保
其他
将被安全销毁

下面很好地描述了移动构造函数的实际操作:

右值引用,也称为“移动构造/分配”,是一种有用的方法 表示从对象构造或赋值的方式 这将不再用于任何其他用途,包括: 例如,一个临时对象-这样你就可以经常得到一个像样的 通过简单地窃取其他对象的内脏来提高性能 而不是制作一个潜在的昂贵的深度拷贝

所以这一行:

buf=other.buf;

实际上是“偷取另一个对象的内脏”。另一个对象不再需要它们,它很快就会消失。

移动计算器与销毁或释放任何东西无关。移动计算器与销毁或释放任何东西无关。