簡體   English   中英

在特定內存地址創建新的 C++ 對象?

[英]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上, MapViewOfFileExVirtualAllocEx允許指定首選虛擬地址。 雖然沒有保證。

假設您有一個指向您想要放置對象的內存位置的指針,我相信可以將指針轉換為新類型,然后將對象放在該指針的位置。 這是一個不需要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM