gpt4 book ai didi

c++ - 通过 malloc 创建类实例而不是 placement new 是否正确?

转载 作者:行者123 更新时间:2023-11-30 01:14:58 26 4
gpt4 key购买 nike

这是一个类。

class A
{
public:
A()
private:
int m_a;
};

我们可以创建类的对象而不是放置运算符 new 并使用 malloc 吗,如下所示:

void* a = malloc(sizeof(A)); // allocate raw memory 
A* obj = reinterpret_cast< A* > ( a ); // assign to the adress
a->A() // call the constructor

是否正确?如果不是,我们是否可以使用 malloc 代替放置 new(使用其他一些 C 技术)构造一个对象?

最佳答案

malloc 获取原始内存后,您需要使用 placement new

class S
{};
...
void *mem = malloc(sizeof(S));
S* s = new (mem) S(); //this is the so called "placement new"

然后显式调用它的析构函数。

s->~S();
free(mem);

关于c++ - 通过 malloc 创建类实例而不是 placement new 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29327950/

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