boost::interprocess::managed_shared_memory(2)(std::string)

#include <iostream>
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/containers/string.hpp>
using namespace std;
int main()
{
    //boost::interprocess::shared_memory_object类是按照单个字节的方式读写共享内存,用起来不方便
    boost::interprocess::shared_memory_object::remove("Highscore"); 
    boost::interprocess::managed_shared_memory managed_shm(boost::interprocess::open_or_create, "Highscore", 1024);//分配1024字节
    //boost不能直接写入stl中的vector, map,string等,必须在boost::interprocess提供的另外一个分配器定义对应的数据类型,不是c++缺省的分配器
    //创建一个分配器,内部使用的是"托管共享内存段管理器",段管理器负责管理位于共享内存内部的内存
    typedef boost::interprocess::allocator<char, boost::interprocess::managed_shared_memory::segment_manager> CharAllocator;
    //使用新建的分配器定义string对应的数据类型基于boost::interprocess::basic_stirng,经过分配器访问段管理器
    typedef boost::interprocess::basic_string<char, std::char_traits<char>, CharAllocator> string;
    //find_or_construct创建string实例需要知道那个段管理器被访问,所以段管理器指针作为构造函数的第二个指针
    string* str = managed_shm.find_or_construct<string>("String")("Hello!", managed_shm.get_segment_manager());
    str->insert(5, " world");
    cout << *str << endl;
    getchar();
    return 0;
}

 

posted @ 2014-05-27 23:51  zzyoucan  阅读(2202)  评论(0编辑  收藏  举报