在 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
完成的
最佳答案
变长数组实际上并不是 C++ 标准的一部分,而是编译器扩展。但是,如果您确实想使用它们,我的意思是,使用 malloc
分配对象,您将需要使用 placement new调用构造函数,并在调用free
之前手动调用析构函数(应该是虚拟的),例如f->~bar()
。由于 malloc
会生成一个指向对象初始化所需大小的内存的指针,因此这不应产生未定义的行为。
关于c++ - 具有多态性的类中灵活的数组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61172086/