19
A
回答
35
您可以使用放置新的构造函数,该构造函数需要一个地址。
Foo* foo = new (your_memory_address_here) Foo();
看看在C++ FAQ lite或MSDN更详细的解释。您需要确保内存正确对齐(malloc
应该返回正确对齐任何内存的内存,但要小心SSE等可能需要对齐至16个字节边界的东西)。
6
请注意,在调用展示位置new
之前,您需要调用内存中的析构函数 - 至少如果对象具有非平凡的析构函数或包含具有的成员。
对于类的一个对象指针obj
Foo
析构函数可以明确地被称为如下:
obj->~Foo();
+2
为什么我们应该在新分配的内存之前调用析构函数,然后再进行新的分配?我没有明白... – Malkocoglu 2009-02-06 12:29:59
2
通过接受的答案中提到的新放置的构造是在报头中定义的分配器类前旧的方式。现在你真的应该做(在C++ 11风格):
allocator<Foo> alloc;
//Allocate memory for one or n objects
auto p = alloc.allocate(1);
//Construct an object of Foo on allocated memory block p, by calling one of Foo's constructors
alloc.construct(p, args, ...);
//OK, p now points to a Foo object ready for use...
//Call Foo's destructor but don't release memory of p
alloc.destroy(p);
//Release memory
alloc.deallocate(p, 1);
就是这样。
相关问题
- 1. Attoparsec在大量的'take'呼叫中分配一吨内存
- 2. 什么时候分配了WCF呼叫的内存?
- 3. MongoS呼叫分配分析
- 4. 已分配内存的分配
- 5. iPhone对象已经不上NSTimed呼叫
- 6. 呼叫内的可变
- 7. 上序列化呼叫的XmlSerializer extraTypes内存泄漏
- 8. 如何使用不同的存根呼叫替换已声明的存根呼叫?
- 9. 将内存分配给已分配的变量?
- 10. 为char分配额外的内存,但不是为已分配的结构中的int分配额外内存?
- 11. C#Outlook - 呼叫被拒绝的呼叫
- 12. http呼叫中的角度http呼叫
- 13. std :: binary_function - 呼叫不匹配?
- 14. 停电呼叫量配额
- 15. 呼叫来电呼叫
- 16. 服务内呼叫服务
- 17. 呼叫从一个makefile内
- 18. 助手内呼叫助手
- 19. ajax函数内呼叫
- 20. 呼叫“qsort”没有匹配的功能
- 21. 呼叫'fopen'没有匹配的函数
- 22. 呼叫“BubbleSort”没有匹配的函数
- 23. 在堆上分配的内存大小
- 24. 分割故障呼叫printf
- 25. 从分机发起呼叫
- 26. Excel中 - 呼叫功能的功能内
- 27. Backbone中视图内的呼叫路由
- 28. 轨道:模型内的呼叫方法
- 29. 呼叫wait()内线程的run()方法
- 30. 呼叫test.php页面内的一个div
对于其他人而言,我不得不'#include`在这之前工作 - g ++抛出了一堆无用的“不匹配函数”错误,如果我没有。 [This](http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10)是关于放置新的信息(也是C++ FAQ),它帮助我理解了它。 –
2011-03-21 01:22:05