当前位置:  开发笔记 > 编程语言 > 正文

在已分配的内存上调用构造函数

如何解决《在已分配的内存上调用构造函数》经验,为你挑选了2个好方法。

这是一个简短的问题:

使用C++,如何在已经分配的内存区域上调用构造函数?



1> Anteru..:

您可以使用placement new构造函数,它接受一个地址.

Foo* foo = new (your_memory_address_here) Foo ();

请查看C++ FAQ lite或MSDN中的更详细说明.你需要确保内存正确对齐的唯一方法(malloc应该返回正确对齐任何内存的内存,但要注意SSE之类的东西,可能需要对齐到16字节边界左右).


对于偶然发现这一点的其他人:我必须在#include 之前做到这一点 - 如果不这样做,g ++会抛出一堆无用的"无匹配函数"错误.[这个](http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10)是有关我的解决方案的新信息(也是C++常见问题解答).

2> Konrad Rudol..:

请注意,在调用placement之前new,您需要在内存上调用析构函数 - 至少如果该对象具有非平凡的析构函数或包含具有的成员.

对于objFoo的对象指针,可以显式调用析构函数,如下所示:

obj->~Foo();


为什么我们应该在进行新的放置之前在新分配的内存上调用析构函数?我不明白......
推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有