Есть ли эквивалент «new», который позволил бы мне создать объект, отображенный в разделяемую память?

#c #winapi #memory-management

#c #winapi #управление памятью

Вопрос:

В настоящее время я пытаюсь заставить два процесса работать вместе в win32. Есть ли какая-то «новая» функция, которую можно использовать как:

 baseAddress = memoryMappedFile->FirstFreePosition();
SharedObject* sharedObject = new(baseAddress) SharedObject()
 
  • Я знаю, что вышесказанное выглядит немного странно, но есть ли
    что-то подобное?
  • Если нет ничего подобного вышеизложенному, означает ли это, что я должен выполнять malloc и free со всеми примитивными типами данных, которые необходимо передавать от процесса к процессу?

Комментарии:

1. SharedObject* sharedObject = new(baseAddress) SharedObject() Похоже, вы, возможно, только что изобрели размещение new .

2. Спасибо, брат. похоже, сегодня вечером мне будет весело.

3. Обратите внимание, что вам также придется явно вызывать деструктор (т. Е. delete Не Будет делать это за вас, вам нужно, например sharedObject->~SharedObject() ). Если у вас C 17, в стандартной библиотеке также есть несколько полезных функций, см., Например, uninitialized_default_construct и friends .

4. ~ SharedObject() . Я обязательно его вызову. Приветствия.

5. Хотя вы можете совместно использовать память между процессами, вы не можете совместно использовать объекты между процессами.