gpt4 book ai didi

c++ - 将一个类复制到未初始化的内存中是否安全?

转载 作者:太空宇宙 更新时间:2023-11-04 15:58:38 25 4
gpt4 key购买 nike

我必须使用malloc 来分配内存。我有一个需要自定义 operator= 的自定义类。假设它是 A:

class A {
public:
int n;
A(int n) : n(n) {}
A& operator=(const A& other) {
n = other.n;
return *this;
}
};

我使用 malloc 分配内存:

int main() {
A* a = (A*) malloc(sizeof(A));
A b(1);

//Is it safe to do this as long as I copy everything in operator=?
*a = b;

//Clean up
a->~A();
free(a);
return 0;
}

我知道我也可以使用 placement new:

a = new (a) A(b);

将自定义类复制到未初始化的内存是否安全?

谢谢

最佳答案

放置新的是正确的

A& operator=(const A& other) 与非构造的“this”一起使用是不正确的(想象一下,如果您有一个非平凡的类型作为 std: :string inside A 影响应该在影响新值之前销毁一个未初始化的字符串)。

一旦你做了 placement new,你就可以使用 assignment。

auto p = new (a) A;
*p = b; // ok

关于c++ - 将一个类复制到未初始化的内存中是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100563/

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