【问题标题】:Mixing "untyped" operator new and "typed" delete混合“无类型”运算符 new 和“类型”删除
【发布时间】:2015-06-23 13:24:16
【问题描述】:

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

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

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

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

new (ptr) SomeClassConstructor();

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

问题 - 是否可以删除以这种方式创建的类,由

delete p;//SomeClass *p;

或者我应该手动调用析构函数并在无类型指针上使用运算符删除?

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

    • 这是否意味着CPlusPlus 示例中的第 29 行和第 35 行不正确?
    • @SeriousAlexej 第 35 行未定义,因为从未构造过该对象。该站点应与大粒盐一起使用。
    • @SeriousAlexej: shock horror :-)
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2023-03-23
    • 2012-12-15
    • 2018-09-09
    相关资源
    最近更新 更多