你能安全地在C ++类的构造函数中使用malloc并使用new来创建该对象的实例吗?我知道在正常情况下将两者串联使用是不安全的,但在这种情况下是否可能/安全?
答案 0 :(得分:7)
是的,你可以,但你应该有充分的理由。 new
运算符调用构造函数,它在很多方面就像常规class
方法一样。您还应该将free()
部分添加到析构函数中。
但请注意,如果您malloc()
c++个对象,则不会调用该对象的构造函数。我认为在c++计划中拨打malloc()
的理由很少:您可能希望稍后realloc()
,这是一个原因。但您始终可以使用c++容器等原生stl对象。
在c++程序中使用两种分配内存的方式并不安全,您只需注意不要malloc()
某些内容,然后delete
它或{ {1}}然后new
它。但是对于free()
,你总是要注意许多事情,例如它返回malloc()
和NULL
分配的内存,所以这不是额外的事情。
再次,你可以做的最危险的事情是free()
一个c++对象。因为正如我已经说过的,不会调用构造函数。