[英]Create new C++ object at specific memory address?
在 C++ 中是否可以在特定的內存位置創建一個新對象? 我有一塊共享內存,我想在其中創建一個對象。 這可能嗎?
你想要放置new
() 。 它基本上使用現有內存塊調用構造函數,而不是從堆中分配新內存。
編輯:確保您在使用之前了解有關負責為使用placement new()
創建的對象顯式調用析構函數的說明!
是。 您需要使用operator new()的放置變體。 例如:
void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;
請注意,placement new不會拋出異常。
如果你想分配很多細粒度的對象,最好的方法是將placement new與某種環形緩沖區結合使用。 否則,除了對象指針本身之外,您還必須跟蹤指針。
在Windows上, MapViewOfFileEx和VirtualAllocEx允許指定首選虛擬地址。 雖然沒有保證。
假設您有一個指向您想要放置對象的內存位置的指針,我相信可以將指針轉換為新類型,然后將對象放在該指針的位置。 這是一個不需要new()的解決方案。
鑒於你的記憶:
// you would use the pointer you have to your allocation of memory char* mem_start = new char[1024]; // Now we have 1024 bytes to play with
可以將其轉換為給定類型:
CustomType* object_ptr = (CustomType*) mem_start;
最后,您可以在那里構造一個對象:
*(object_ptr) = CustomType();
classname *objname = new (ptr) classname;```
You Can Do it by simple doing this.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.