首页 > 后端开发 > C++ > 正文

如何使用 malloc 创建对象并确保构造函数调用?

Patricia Arquette
发布: 2024-11-01 16:04:02
原创
127 人浏览过

 How can I create an object using malloc and ensure constructor invocation?

使用 Malloc 进行构造函数调用:与 New 和 Delete 的对比

与无处不在的 new 和 delete 表达式相比,std::malloc 呈现出一种独特的行为:它确实在内存分配时不会自动调用对象的构造函数。这就提出了一个问题:我们如何使用 malloc 创建对象,同时确保构造函数调用?

答案:

推荐且直观的方法是使用 new 运算符,它本质上处理内存分配和构造函数调用。或者,我们可以通过“placement new”手动调用构造函数,这是一种采用显式构造函数调用的技术。

通过 Placement New 进行自定义处理

以下代码片段说明了placement new 的用法:

<code class="cpp">A* a = (A*)malloc(sizeof(A));
new (a) A();</code>
登录后复制

这里,指针 a 指向分配的大小为 sizeof(A) 的内存,并且放置 new 表达式 new (a) A() 随后在该内存位置构造一个 A 对象。

当不再需要该对象时,我们手动调用析构函数并释放分配的内存:

<code class="cpp">a->~A();
free(a);</code>
登录后复制

需要注意的是,除非有特定情况禁止,否则通常不会使用placement new使用new和delete。

以上是如何使用 malloc 创建对象并确保构造函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!