【发布时间】:2016-04-28 11:37:50
【问题描述】:
我想知道我是否有一个类“Object”,然后我想创建一个 ObjectList - Object** p_obj。那么我可以 malloc/free 为 p_obj 和 new/delete 为 p_obj[i] 吗?
类似:
p_obj = (Object**) malloc(sizeof(Object*) * count_obj)
p_obj[0] = new Object();
并在析构函数中使用 delete 和 free 释放它们; 如果可以,那么它可能会导致哪些潜在问题?
提前致谢。
【问题讨论】:
-
C 和 C++ 是不同的语言。同时拥有两个标签几乎总是不正确的。由于您显然在使用 C++ (
new),请删除 C 标记。 -
没有理由不能。你同样可以做到
Object o; p_obj = new Object*[1]; p_obj[0] = &o;- “混合”自动和动态分配。 -
@Revolver_Ocelot thx,我已经解决了。
-
释义 Stroustrup:如果你的代码有
delete或delete[],你可能有一个错误。如果它有一个赤裸裸的new或new[],它应该有一个delete或delete[],见第一句。因此,只需使用容器和自动对象,如果需要(很少)使用智能指针。 -
所以 tl;dr:使用
std::vector<Object>,忘记new[]和malloc。两者都会产生糟糕的代码。
标签: c++