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