boost interprocess:共享内存和stl类型

时间:2009-08-13 13:47:03

标签: c++ stl boost boost-interprocess

我有一个简单的结构:

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;

它有效!

2 个答案:

答案 0 :(得分:3)

你应该使用

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

答案 1 :(得分:2)

Boost.Interprocess通常提供STL类型的替换,以便在共享内存中使用。 std :: string,特别是当只是一个struct的成员时,将无法从另一个进程访问。其他人也有such a problem