]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/interprocess/example/doc_shared_ptr_explicit.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / interprocess / example / doc_shared_ptr_explicit.cpp
CommitLineData
7c673cae
FG
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//////////////////////////////////////////////////////////////////////////////
1e59de90 11
7c673cae
FG
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
24using namespace boost::interprocess;
25
26//This is type of the object we want to share
27class MyType
28{};
29
30typedef managed_shared_memory::segment_manager segment_manager_type;
31typedef allocator<void, segment_manager_type> void_allocator_type;
32typedef deleter<MyType, segment_manager_type> deleter_type;
33typedef shared_ptr<MyType, void_allocator_type, deleter_type> my_shared_ptr;
34
35int 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//]
1e59de90 83