将new与C++;使用C malloc的构造函数 < P> C++中的构造函数可以安全地使用MALOC,并使用新创建该对象的实例吗?我知道,在正常情况下,将两者同时使用是不安全的,但在这种情况下,是否可能/安全
是的,你可以,但你应该有充分的理由。将new与C++;使用C malloc的构造函数 < P> C++中的构造函数可以安全地使用MALOC,并使用新创建该对象的实例吗?我知道,在正常情况下,将两者同时使用是不安全的,但在这种情况下,是否可能/安全,c++,c,memory,malloc,new-operator,stl,C++,C,Memory,Malloc,New Operator,Stl,是的,你可以,但你应该有充分的理由。new操作符调用构造函数,该构造函数在许多方面与常规的类方法类似。您还应该将free()部分添加到析构函数中 但是请注意,如果您malloc()一个对象,该对象的构造函数将不会被调用。我认为在程序中调用malloc()的原因很少:您可能希望稍后调用realloc(),这是一个原因。但您始终可以使用容器之类的本机对象 在程序中使用这两种分配内存的方法并不是不安全的,您只需小心不要malloc()某个东西,然后删除它或new某个东西,然后free()它。但是使用
new
操作符调用构造函数,该构造函数在许多方面与常规的类
方法类似。您还应该将free()
部分添加到析构函数中
但是请注意,如果您malloc()
一个对象,该对象的构造函数将不会被调用。我认为在程序中调用malloc()
的原因很少:您可能希望稍后调用realloc()
,这是一个原因。但您始终可以使用容器之类的本机对象
malloc()
某个东西,然后删除它或new
某个东西,然后free()
它。但是使用malloc()
时,您必须始终注意许多事情,例如它返回NULL
和free()
占用分配的内存,因此它不是额外的事情
同样,您可以做的最危险的事情是malloc()
对象。因为正如我已经说过的,构造函数不会被调用
你在寻找吗?是的,它是有效的:你的问题是关于一些可能看起来像:`struct A{int*val;A():val(malloc(sizeof(int)){}~A(){free(val);};A*=new A;我假设,如果构造函数包含指向位置不正确的内存的指针,并且析构函数释放了它,那么使用
new
分配构造的对象就没有问题。这并不完全是以通常的方式进行的,但只要将两组内存分配问题小心地隔离,你应该没问题。如果你想把对象作为一个整体来看待,那么你就有问题了——你在一个隐藏到零的状态。当然。当你一直在调用C库时就会发生这种情况。C库的init函数经常进行大量的malloc
调用,我是从构造函数调用它的。