与无处不在的 new 和 delete 表达式相比,std::malloc 呈现出一种独特的行为:它确实在内存分配时不会自动调用对象的构造函数。这就提出了一个问题:我们如何使用 malloc 创建对象,同时确保构造函数调用?
答案:
推荐且直观的方法是使用 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中文网其他相关文章!