C++ 中可以混合使用 free 和构造函数吗? [复制]

2024-03-09

可能的重复:
调用free()或delete而不是delete[]有什么危险吗? https://stackoverflow.com/questions/1612031/is-there-any-danger-in-calling-free-or-delete-instead-of-delete

我正在读这个问题:
在什么情况下使用 malloc 和 new? https://stackoverflow.com/questions/184537/in-what-cases-do-i-use-malloc-vs-new/

有人提出使用 malloc 的原因之一是如果您要使用 free。

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

i.e.

我能说......么:

my_type *ptr = new my_type;
free(my_type);

这是无效的还是比以下更糟糕:

my_type *ptr = new my_type;
delete my_type;

除了它不是 C++ 的事实之外?

同样,你能做相反的事吗?你可以说

my_type *ptr = (my_type *)malloc(sizeof(my_type));
delete my_type;

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


不,它是无效的。无法保证new将使用malloc or delete将使用free.

此外,使用free代替delete将跳过my_type的析构函数。如果my_type本身持有一些资源,这些资源将会被泄露。相似地,malloc将跳过构造函数,因此变量可能处于无效状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中可以混合使用 free 和构造函数吗? [复制] 的相关文章

随机推荐