1 //////////////////////////////////////////////////////////////////////////////
3 // (C) Copyright Ion Gaztanaga 2006-2009.
4 // Distributed under the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
8 // See http://www.boost.org/libs/interprocess for documentation.
10 //////////////////////////////////////////////////////////////////////////////
11 #include <boost/interprocess/detail/config_begin.hpp>
12 #include <boost/interprocess/detail/workaround.hpp>
14 //[doc_shared_ptr_explicit
15 #include <boost/interprocess/managed_shared_memory.hpp>
16 #include <boost/interprocess/smart_ptr/shared_ptr.hpp>
17 #include <boost/interprocess/allocators/allocator.hpp>
18 #include <boost/interprocess/smart_ptr/deleter.hpp>
21 #include "../test/get_process_id_name.hpp"
24 using namespace boost::interprocess;
26 //This is type of the object we want to share
30 typedef managed_shared_memory::segment_manager segment_manager_type;
31 typedef allocator<void, segment_manager_type> void_allocator_type;
32 typedef deleter<MyType, segment_manager_type> deleter_type;
33 typedef shared_ptr<MyType, void_allocator_type, deleter_type> my_shared_ptr;
37 //Remove shared memory on construction and destruction
42 shm_remove() { shared_memory_object::remove(test::get_process_id_name()); }
43 ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); }
46 shm_remove() { shared_memory_object::remove("MySharedMemory"); }
47 ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
55 managed_shared_memory segment(create_only, test::get_process_id_name(), 4096);
58 managed_shared_memory segment(create_only, "MySharedMemory", 4096);
63 //Create a shared pointer in shared memory
64 //pointing to a newly created object in the segment
65 my_shared_ptr &shared_ptr_instance =
66 *segment.construct<my_shared_ptr>("shared ptr")
67 //Arguments to construct the shared pointer
68 ( segment.construct<MyType>("object to share")() //object to own
69 , void_allocator_type(segment.get_segment_manager()) //allocator
70 , deleter_type(segment.get_segment_manager()) //deleter
72 assert(shared_ptr_instance.use_count() == 1);
74 //Destroy "shared ptr". "object to share" will be automatically destroyed
75 segment.destroy_ptr(&shared_ptr_instance);
80 #include <boost/interprocess/detail/config_end.hpp>