gpt4 book ai didi

c++ - move 构造函数孤立内存?

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:26 26 4
gpt4 key购买 nike

我正在看这个显示 move 构造函数的答案:

https://stackoverflow.com/a/3109981/997112

#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);
}

};

然后引入一个 move 构造函数:

string(string&& that)   // string&& is an rvalue reference to a string
{
data = that.data;
that.data = 0;
}

如果我们将指针 data 分配给值 that.data,这肯定会导致 new char[size] 内存泄漏data 最初指向哪个?我很困惑。

最佳答案

data 还没有指向任何东西,因为这是构造函数。这是创建对象时发生的第一件事。

当构造这个对象时,它获得了由另一个对象分配的that.data 的所有权。通过将 0 分配给 that.data,可以确保其他对象不会删除 数据。现在该对象负责执行此操作,它将在其析构函数中执行。

关于c++ - move 构造函数孤立内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24494524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com