你能用C++混合free和constructor吗?

Jas*_*ick 1 c++ malloc free constructor

可能重复:
调用free()或delete而不是delete []有危险吗?

我正在读这个问题:
在什么情况下我使用malloc vs new?

有人提出使用malloc的一个原因是你要免费使用.

我想知道:在C++中混合使用免费调用和构造函数初始化是否有效?

我能说......么:

my_type *ptr = new my_type;
free(my_type);
Run Code Online (Sandbox Code Playgroud)

这在某种程度上是无效的还是更糟糕的:

my_type *ptr = new my_type;
delete my_type;
Run Code Online (Sandbox Code Playgroud)

除了它不是c ++ ish的事实?

同样,你可以反其道而行之吗?你可以说

my_type *ptr = (my_type *)malloc(sizeof(my_type));
delete my_type;
Run Code Online (Sandbox Code Playgroud)

请合并,如果这是重复,我搜索但没有看到关于malloc/delete/new/free询问的问题.

ken*_*ytm 11

不,它无效.无法保证new将使用mallocdelete将使用free.

而且,使用free而不是delete将跳过my_type的析构函数.如果my_type它本身持有一些资源,那些将被泄露.类似地,malloc将跳过构造函数,因此变量可能处于无效状态.


nos*_*nos 5

在C++中混合使用空闲调用和构造函数初始化是否有效?

不它不是.

malloc,calloc,realloc - >免费

新 - >删除

new [] - > delete []