1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // (C) Copyright Ion Gaztanaga 2006-2012.
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)
7 //
8 // See http://www.boost.org/libs/interprocess for documentation.
9 //
10 //////////////////////////////////////////////////////////////////////////////
11 #include <boost/interprocess/detail/config_begin.hpp>
12 #include <boost/interprocess/detail/workaround.hpp>
13
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>
19 #include <cassert>
20 //<-
21 #include "../test/get_process_id_name.hpp"
22 //->
23
24 using namespace boost::interprocess;
25
26 //This is type of the object we want to share
27 class MyType
28 {};
29
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;
34
main()35 int main ()
36 {
37 //Remove shared memory on construction and destruction
38 struct shm_remove
39 {
40 //<-
41 #if 1
42 shm_remove() { shared_memory_object::remove(test::get_process_id_name()); }
43 ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); }
44 #else
45 //->
46 shm_remove() { shared_memory_object::remove("MySharedMemory"); }
47 ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
48 //<-
49 #endif
50 //->
51 } remover;
52 //<-
53 (void)remover;
54 //->
55
56 //<-
57 #if 1
58 managed_shared_memory segment(create_only, test::get_process_id_name(), 4096);
59 #else
60 //->
61 managed_shared_memory segment(create_only, "MySharedMemory", 4096);
62 //<-
63 #endif
64 //->
65
66 //Create a shared pointer in shared memory
67 //pointing to a newly created object in the segment
68 my_shared_ptr &shared_ptr_instance =
69 *segment.construct<my_shared_ptr>("shared ptr")
70 //Arguments to construct the shared pointer
71 ( segment.construct<MyType>("object to share")() //object to own
72 , void_allocator_type(segment.get_segment_manager()) //allocator
73 , deleter_type(segment.get_segment_manager()) //deleter
74 );
75 assert(shared_ptr_instance.use_count() == 1);
76
77 //Destroy "shared ptr". "object to share" will be automatically destroyed
78 segment.destroy_ptr(&shared_ptr_instance);
79
80 return 0;
81 }
82 //]
83 #include <boost/interprocess/detail/config_end.hpp>
84