c – 创建没有“新”运算符的类的新实例 - 代码日志

c – 创建没有“新”运算符的类的新实例

只是一个简单的问题。正如标题所示,我只使用“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,它与新的略有不同。 placement-new用于通过调用构造函数来构造对象。在第三个例子中,malloc只分配内存,它不调用构造函数,这就是为什么使用了layout-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!

要了解什么是新功能,请阅读以下常见问题解答:

> What is “placement new” and why would I use it?(parashift.com的FAQ)
> placement new(stackoverflow.com的常见问题)

http://stackoverflow.com/questions/5885634/create-new-instance-of-a-class-without-new-operator

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 创建没有“新”运算符的类的新实例