【发布时间】:2020-07-25 01:54:06
【问题描述】:
在 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()或运算符new)被认为是不好的做法。考虑使用标准容器,例如std::vector<int>,它将为您提供动态分配的 - 小心 - 一组可调整大小的ints(因为它在后台进行动态内存分配,而不是您直接进行)。如果您确实必须使用malloc()来分配内存,您可以使用std::unique_ptr<>,但提供一个(可选)使用free()的删除器。malloc()与 C++ 中的类不兼容,特殊情况除外。
标签: c++ c++11 polymorphism flexible-array-member