STLもmanaged上ならば使用可能

[注意] この記事は間違っている可能性が高いです

できるのかなーと思っていたんですが、managed上であればsegment_managerを使用したアロケータを作成すればSTLコンテナをそのまま利用できるようです。(じゃあなんで同じようなコンテナがboost.interprocess内には入ってるんだろうか…STL用アロケータを用意すればよかったのでは?)get_segment_managerで受け取ったsegment managerを受け取って作成できるようになっていれば問題ないようです。

#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <vector>

template<class T,class SegmentManager>
class MySTL_allocator
{
    /*
        segment_managerの使い方がよくわからなくて挫折.
        そのうち書きますorz
    */
};

int main()
{
    namespace bip = boost::interprocess;

    // shared memoryで作成したオブジェクトは残るので手動で削除する必要がある
    struct shared_memory_deleter
    {
        shared_memory_deleter()  { bip::shared_memory_object::remove("MySharedMemory"); }
        ~shared_memory_deleter() { bip::shared_memory_object::remove("MySharedMemory"); }
    } shm_deleter;

    bip::managed_shared_memory shared_memory( bip::create_only, "MySharedMemory", 4096 );
    bip::managed_shared_memory::segment_manager* manager = shared_memory.get_segment_manager();

    // segment_managerを使ったアロケータ
    typedef MySTL_allocator<int,bip::managed_shared_memory::segment_manager> stl_allocator;
    stl_allocator allocator(manager);

    // 上記のアロケータを使ってSTLのvectorを作成
    typedef std::vector<int,stl_allocator> MyVector;
    MyVector* vec = shared_memory.construct<MyVector>("MyVector_Instance")(allocator);
}

ちなみに、interprocessが持っているアロケータを渡しても内部でこけます。allocateメソッドなどがinterprocess.offset_ptrで返却してるのが原因のようです。(やっぱりSTL用アロケータを用意すれば良かったんじゃないかなあ?)
追記)上記のコードで自作アロケータクラスのテンプレート引数は2個ですが、std::allocatorと合わせておいた方が良いと思います。