使用新的C ++构造函数使用C malloc

时间:2016-08-28 15:23:25

标签: c++ c memory malloc new-operator

你能安全地在C ++类的构造函数中使用malloc并使用new来创建该对象的实例吗?我知道在正常情况下将两者串联使用是不安全的,但在这种情况下是否可能/安全?

1 个答案:

答案 0 :(得分:7)

  1. 是的,你可以,但你应该有充分的理由。 new运算符调用构造函数,它在很多方面就像常规class方法一样。您还应该将free()部分添加到析构函数中。

    但请注意,如果您malloc() 个对象,则不会调用该对象的构造函数。我认为在计划中拨打malloc()的理由很少:您可能希望稍后realloc(),这是一个原因。但您始终可以使用容器等原生对象。

  2. 程序中使用两种分配内存的方式并不安全,您只需注意不要malloc()某些内容,然后delete它或{ {1}}然后new它。但是对于free(),你总是要注意许多事情,例如它返回malloc()NULL分配的内存,所以这不是额外的事情。

    再次,你可以做的最危险的事情是free()一个对象。因为正如我已经说过的,不会调用构造函数。