显式构造函数调用

JMH*_*JMH 7 c++

我想知道是否有某种技巧可以使用对象指针显式调用构造函数.如果这是一个合法的语法,它将如下所示:

Foo *p = malloc( sizeof(Foo) );

p->Foo::Foo();
Run Code Online (Sandbox Code Playgroud)

PS我知道我能做到,Foo *p = new Foo();但有明确的理由明确使用malloc().

Mat*_*gro 17

您可以使用"placement new"运算符:

Foo *buf = malloc( sizeof(Foo) );
Foo *p = new (buf) Foo();
Run Code Online (Sandbox Code Playgroud)

  • 还应该注意,在这种情况下,你还负责显式调用析构函数:`p-> ~Foo();`(`delete p`将不起作用). (10认同)
  • 不要忘记,如果你手动构建它,你也应该手动销毁它. (3认同)

Ale*_*ler 9

使用展示位置:

Foo* p = new(malloc(sizeof(Foo))) Foo;
Run Code Online (Sandbox Code Playgroud)

(在此省略任何内存不足检查)

基本上,在指向的位置new(address) Foo()构造一个类型的对象,换句话说:它调用构造函数.Fooaddress