C++11 使用移动构造函数重置
我在读有关move构造函数的文章,试图学习C++11,它说 move构造函数重置源指针rhs.data。这边 当临时文件被销毁时,删除[]将无害地应用 指向空指针 现在作者做了这样的事情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
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;
实际上是“偷取另一个对象的内脏”。另一个对象不再需要它们,它很快就会消失。移动计算器与销毁或释放任何东西无关。移动计算器与销毁或释放任何东西无关。