Подтвердить что ты не робот

Создать новый объект С++ по определенному адресу памяти?

Возможно ли в С++ создать новый объект в определенной ячейке памяти? У меня есть блок разделяемой памяти, в котором я хотел бы создать объект. Возможно ли это?

4b9b3361

Ответ 1

Вы хотите размещение new(). Он в основном вызывает конструктор, используя блок существующей памяти вместо выделения новой памяти из кучи.

Изменить: убедитесь, что вы понимаете примечание о том, что вы отвечаете за вызов деструктора явно для объектов, созданных с помощью размещения new(), прежде чем использовать его!

Ответ 2

Да. Вам нужно использовать вариант размещения оператора new(). Например:

void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;

Обратите внимание, что размещение new не генерирует исключение.

Ответ 3

если вы хотите выделить много мелкозернистых объектов, лучшим подходом будет использование нового места в сочетании с каким-то кольцевым буфером. в противном случае вам придется отслеживать указатели в стороне от самих указателей объектов.

Ответ 4

В Windows MapViewOfFileEx и VirtualAllocEx разрешить один для указания предпочтительного виртуального адреса. Однако никаких гарантий.