boost interprocess: общая память и типы stl

У меня есть простая структура:

struct MyType
{
    std::string name;
    std::string description;
}

и я помещаю его в общую память:

managed_shared_memory sharedMemory(open_or_create, "name", 65535);
MyType* pType = sharedMemory.construct<MyType>("myType")();
// ... setting pType members ...

Если два приложения, взаимодействующие с общей памятью, созданы с использованием разных версий Visual Studio (разные версии реализации stl), следует ли помещать собственные типы в общую память (например, char *) вместо типов stl?

Изменить :

я пробовал с

typedef boost::interprocess::basic_string<char> shared_string;

и это работает!


person Nicolas    schedule 13.08.2009    source источник


Ответы (2)


Boost.Interprocess часто предлагает замену типам STL для использования в разделяемой памяти. std::string, особенно если он является членом структуры, не будет доступен из другого процесса. У других людей также была подобная проблема.

person gimpf    schedule 13.08.2009
comment
Да, см. этот раздел документации: boost.org/doc/libs/1_39_0/doc/html/interprocess/ - person Jason B; 13.08.2009

Вы должны использовать

typedef boost::interprocess::basic_string<char> shared_string;
struct MyType
{
    shared_string name;
    shared_string description;
}
person Sahas    schedule 13.08.2009