use*_*112 0 c++ pointers memory-management move-semantics c++11
我正在看这个显示移动构造函数的答案:
#include <cstring>
#include <algorithm>
class string
{
char* data;
public:
string(const char* p)
{
size_t size = strlen(p) + 1;
data = new char[size];
memcpy(data, p, size);
}
~string()
{
delete[] data;
}
string(const string& that)
{
size_t size = strlen(that.data) + 1;
data = new char[size];
memcpy(data, that.data, size);
}
};
Run Code Online (Sandbox Code Playgroud)
然后介绍一个移动构造函数:
string(string&& that) // string&& is an rvalue reference to a string
{
data = that.data;
that.data = 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我们分配指向data该值的指针that.data,肯定这会导致内存泄漏,该new char[size]内存data最初指向的内存?我很迷惑.
data还没有指向任何东西,因为这是构造函数.这是创建对象时首先发生的事情.
构造此对象时,它的所有权that.data由另一个对象分配.通过分配0到that.data,它保证了其他对象不会delete将数据.现在这个对象负责这样做,它将在它的析构函数中执行.