具有多态性的类中的可变长度数组

问题描述 投票:0回答:1

在C99中,您可以有类似的东西

struct foo
{
    int a;
    int data[];
}; 

然后使用foo* f=(foo*)malloc(sizeof(foo)+n)进行分配,以得到数组长度为n的结构。

当类是具有虚函数的子类时,可以在C ++中做类似的事情吗?

foo是bar的子类,然后执行类似std::unique_ptr<bar> f= std::unique_ptr<foo>((foo*)malloc(sizeof(foo)+n))的操作>

我知道该代码无法正常工作,因为释放内存将由delete完成,但分配已由malloc完成>

在C99中,您可以使用struct foo {int a; int数据[]; };然后使用foo * f =(foo *)malloc(sizeof(foo)+ n)进行分配,以具有其中数组长度为n的结构。可以...

c++ c++11 polymorphism malloc new-operator
1个回答
0
投票

不,根据标准规则是不可能的。您在示例中显示的灵活数组成员完全不支持C ++。也没有等效或替代的选择。

malloc完全不能用于在C ++中创建对象。只有具有正确类型的new

© www.soinside.com 2019 - 2024. All rights reserved.