移动构造函数孤立内存
Move constructor orphaning memory?
我正在看这个答案显示移动构造函数:
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
,这肯定会导致data
最初指向的new char[size]
内存的内存泄漏?
data
没有指向任何东西,因为这是构造函数。这是创建对象时发生的第一件事。
在构造这个对象时,它占有另一个对象分配的that.data
的所有权。通过将0
赋值给that.data
,可以确保其他对象不会将数据delete
。现在这个对象负责这样做,它将在析构函数中完成。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 在构造函数中分配内存失败是如何冒泡的
- 动态分配的内存构造函数
- 构造函数主体内的本地指针C++内存泄漏
- 从构造函数内存泄漏引发异常
- QThreads - 为什么要在构造函数中分配内存而不是使用普通的类成员?
- 构造函数对象赋值是否泄漏内存
- 如何使用构造函数初始化内存地址(指针变量)?
- 是否可以反序列化(从原始内存块)没有默认构造函数的对象?
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 如果在构造函数中发生异常,如何释放动态内存
- 在类构造函数中初始化映射时,如何避免内存泄漏
- 链接列表C 的复制构造函数中的内存泄漏
- 复制赋值构造函数中的aligned_alloc内存块在释放时崩溃
- 构造函数中的动态内存分配
- 构造函数和内存泄漏中的异常
- 当构造函数引发异常时,如何在构造函数中分配内存
- 构造函数C++中的类实例内存地址
- C 内存模型是否提供了有关构造函数操作的保证