【发布时间】:2011-06-05 07:59:32
【问题描述】:
在使用“placement new”时,建议显式调用构造函数和析构函数。
在这种情况下,在类的初始化程序部分中初始化的对象是否也能正确构造?
显式调用析构函数也一样吗?成员对象是否被正确销毁?
【问题讨论】:
-
`建议显式调用构造函数和析构函数`。如何显式调用构造函数?
-
@Mahesh,
void* const pmem = malloc(sizeof(test)); test* const t = new((void*)pmem) test();和 dtor:t->~test();。 -
@ MJ - AFAIK 你可以调用析构函数,但
explicit不应该用于构造函数。尽管在初始化列表中,您似乎正在从其派生类调用基类构造函数。如果使用关键字explicit,那么如果foo是类名,我应该可以使用obj->foo()。但这是不允许的。我说的对吗? -
@Moo-Juice:如果这是显式的定义,那么构造函数总是显式调用。通常我们认为构造函数在对象构造期间被隐式调用(因为构造函数没有实际名称)。可以显式调用析构函数。
-
创建对象数组时没有显式调用构造函数。
标签: c++ constructor destructor initializer placement-new