Пожалуйста, рассмотрите следующую структуру:
struct ThingThatWillGoInSharedMemory {
boost::optional<int> opt_value;
};
Я использую boost::interprocess для создания области общей памяти. Мое понимание boost::Optional заключалось в том, что это был размеченный союз, а не указатель, допускающий значение NULL. В качестве контрпримера такие вещи, как std::map и std::vector, которые используют кучу, нуждаются в явном распределителе для их использования в межпроцессной памяти, но boost::Optional, я был уверен, не использует кучу и эквивалентен письмо:
struct ThingThatWillGoInSharedMemory {
bool value_initialised;
int value;
}
Так что его можно использовать из коробки. Я был бы рад, если бы кто-то это подтвердил - я не видел, чтобы случай межпроцессного взаимодействия был явно упомянут в документах boost:: optional, только подразумевался.