混合"无类型" operator new和" typed"删除

时间:2015-06-23 13:24:16

标签: c++

我想创建一个类工厂,可以创建对它们一无所知的类(例如,不包含头文件)。我创建了一个带有map的工厂类,它通过字符串(map(string,mystruct))存储有关类(sizeof和指向静态方法的指针)的信息,这些字符串是从每个类填充的。

当工厂生成一个类时,它会分配原始内存并调用静态方法,然后调用该内存上的默认构造函数:

void *ptr = operator new(classSize);
classCCaller(ptr);//void (*classCCaller)(void*)

然后在该类的静态方法内执行以下代码:

new (ptr) SomeClassConstructor();

然后将生成的类放入某个容器中。

问题 - 可以通过

删除以这种方式创建的类
delete p;//SomeClass *p;

还是应该手动调用析构函数并在无类型指针上使用operator delete?

1 个答案:

答案 0 :(得分:4)

不,你必须说p->~SomeClass(); operator delete(ptr);,其中p = static_cast<SomeClass*>(ptr)