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

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

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

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

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

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

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

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

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

  • Неравномерные указатели на x86
  • Указатели в c ++ после удаления
  • Почему некоторые люди предпочитают «T const &» над «const T &»?
  • Неинициализированные указатели в коде
  • Почему не указатели инициализируются с помощью NULL по умолчанию?
  • Указатель против ссылки
  • Массив для разметки указателя и передачи многомерных массивов в функции
  • Что происходит, когда вы удаляете указатель дважды или больше на C ++?
  • Причина, почему бы не иметь макрос DELETE для C ++
  • Безопасно ли удалить указатель NULL?
  • Использование стрелки (->) в C
  • Давайте будем гением компьютера.