我想创建一个类工厂,可以创建对它们一无所知的类(例如,不包含头文件)。我创建了一个带有map的工厂类,它通过字符串(map(string,mystruct))存储有关类(sizeof和指向静态方法的指针)的信息,这些字符串是从每个类填充的。
当工厂生成一个类时,它会分配原始内存并调用静态方法,然后调用该内存上的默认构造函数:
void *ptr = operator new(classSize);
classCCaller(ptr);//void (*classCCaller)(void*)
然后在该类的静态方法内执行以下代码:
new (ptr) SomeClassConstructor();
然后将生成的类放入某个容器中。
问题 - 可以通过
删除以这种方式创建的类delete p;//SomeClass *p;
还是应该手动调用析构函数并在无类型指针上使用operator delete?
答案 0 :(得分:4)
不,你必须说p->~SomeClass(); operator delete(ptr);
,其中p = static_cast<SomeClass*>(ptr)
。