Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将new与C++;使用C malloc的构造函数 < P> C++中的构造函数可以安全地使用MALOC,并使用新创建该对象的实例吗?我知道,在正常情况下,将两者同时使用是不安全的,但在这种情况下,是否可能/安全_C++_C_Memory_Malloc_New Operator_Stl - Fatal编程技术网

将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
    调用,我是从构造函数调用它的。