在C++类的构造函数中使用malloc函数并使用new来创建对象实例是否安全?我知道通常情况下两者混用是不安全的,但在这种情况下是否可能/安全呢?
在C++类的构造函数中使用malloc函数并使用new来创建对象实例是否安全?我知道通常情况下两者混用是不安全的,但在这种情况下是否可能/安全呢?
是的,你可以这样做,但你需要有一个很强的理由。 new
运算符会调用构造函数,它在许多方面就像一个普通的 class
方法。你还应该在析构函数中添加 free()
部分。
但请注意,如果你使用 malloc()
分配 c++ 对象,那么该对象的构造函数将不会被调用。我认为在 c++ 程序中使用 malloc()
的原因非常少:你可能希望稍后使用 realloc()
,这是一个原因。但你总是可以使用本地 c++ 对象,如 stl 容器。
在 c++ 程序中使用两种分配内存的方法并不不安全,你只需要小心不要 malloc()
一些东西然后 delete
它或者 new
一些东西然后 free()
它。但是对于 malloc()
,你始终需要小心很多事情,例如它返回 NULL
和释放已分配的内存,所以这并不是额外的事情。
再次强调,你能做的最危险的事情就是 malloc()
一个 c++ 对象。因为如我所说,构造函数不会被调用。
new
吗? - πάντα ῥεῖstruct A { int* val; A() : val(malloc(sizeof(int)) {} ~A() { free(val); }; A* = new A;
- Francknew
分配构造的对象没有问题。虽然这不是通常的做法,但只要您仔细地将两组内存分配问题分开处理,就应该没问题。如果您想整体上使用malloc()
分配对象,则会遇到问题 - 这样做是徒劳无功的。 - Jonathan Lefflermalloc
调用,并且我从构造函数中调用了它。 - Zan Lynx