1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2006-2007.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/interprocess for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include <boost/interprocess/detail/config_begin.hpp>
#include <boost/interprocess/detail/workaround.hpp>
//[doc_shared_ptr_explicit
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/smart_ptr/shared_ptr.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/smart_ptr/deleter.hpp>
#include <cassert>
using namespace boost::interprocess;
//This is type of the object we want to share
class MyType
{};
typedef managed_shared_memory::segment_manager segment_manager_type;
typedef allocator<void, segment_manager_type> void_allocator_type;
typedef deleter<MyType, segment_manager_type> deleter_type;
typedef shared_ptr<MyType, void_allocator_type, deleter_type> my_shared_ptr;
int main ()
{
//Destroy any previous segment with the name to be used.
shared_memory_object::remove("MySharedMemory");
managed_shared_memory segment(create_only, "MySharedMemory", 4096);
//Create a shared pointer in shared memory
//pointing to a newly created object in the segment
my_shared_ptr &shared_ptr_instance =
*segment.construct<my_shared_ptr>("shared ptr")
//Arguments to construct the shared pointer
( segment.construct<MyType>("object to share")() //object to own
, void_allocator_type(segment.get_segment_manager()) //allocator
, deleter_type(segment.get_segment_manager()) //deleter
);
assert(shared_ptr_instance.use_count() == 1);
//Destroy "shared ptr". "object to share" will be automatically destroyed
segment.destroy_ptr(&shared_ptr_instance);
shared_memory_object::remove("MySharedMemory");
return 0;
}
//]
#include <boost/interprocess/detail/config_end.hpp>
|