gpt4 book ai didi

c++ - 创建没有 "new"运算符的类的新实例

转载 作者:IT老高 更新时间:2023-10-28 21:55:37 26 4
gpt4 key购买 nike

只是一个简单的问题。正如标题所暗示的,我只使用了“new”运算符来创建类的新实例,所以我想知道其他方法是什么以及如何正确使用它。

最佳答案

您还可以拥有不使用 new 的类的 自动 实例,例如:

class A{};

//automatic
A a;

//using new
A *pA = new A();

//using malloc and placement-new
A *pA = (A*)malloc(sizeof(A));
pA = new (pA) A();

//using ONLY placement-new
char memory[sizeof(A)];
A *pA = new (memory) A();

最后两个使用placement-new这与 new 略有不同。 Placement-new 用于通过调用构造函数来构造对象。在第三个例子中,malloc只分配内存,不调用构造函数,这就是为什么使用placement-new来调用构造函数来构造对象的原因。

还要注意如何删除内存。

  //when pA is created using new
delete pA;

//when pA is allocated memory using malloc, and constructed using placement-new
pA->~A(); //call the destructor first
free(pA); //then free the memory

//when pA constructed using placement-new, and no malloc or new!
pA->~A(); //just call the destructor, that's it!

要了解什么是新展示位置,请阅读以下常见问题解答:

关于c++ - 创建没有 "new"运算符的类的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5885634/

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