gpt4 book ai didi

c++ - 混合 "untyped"operator new 和 "typed"delete

转载 作者:行者123 更新时间:2023-11-27 22:57:40 26 4
gpt4 key购买 nike

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

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

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

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

new (ptr) SomeClassConstructor();

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

问题 - 是否可以删除以这种方式创建的类<​​/p>

delete p;//SomeClass *p;

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

最佳答案

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

关于c++ - 混合 "untyped"operator new 和 "typed"delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31004029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com