doc_managed_construction_info.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright Ion Gaztanaga 2006-2012. Distributed under the Boost
  4. // Software License, Version 1.0. (See accompanying file
  5. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // See http://www.boost.org/libs/interprocess for documentation.
  8. //
  9. //////////////////////////////////////////////////////////////////////////////
  10. #include <boost/interprocess/detail/config_begin.hpp>
  11. //[doc_managed_construction_info
  12. #include <boost/interprocess/managed_shared_memory.hpp>
  13. #include <cassert>
  14. #include <cstring>
  15. //<-
  16. #include "../test/get_process_id_name.hpp"
  17. //->
  18. class my_class
  19. {
  20. //...
  21. };
  22. int main()
  23. {
  24. using namespace boost::interprocess;
  25. //Remove shared memory on construction and destruction
  26. struct shm_remove
  27. {
  28. //<-
  29. #if 1
  30. shm_remove() { shared_memory_object::remove(test::get_process_id_name()); }
  31. ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); }
  32. #else
  33. //->
  34. shm_remove() { shared_memory_object::remove("MySharedMemory"); }
  35. ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
  36. //<-
  37. #endif
  38. //->
  39. } remover;
  40. //<-
  41. (void)remover;
  42. //->
  43. //<-
  44. #if 1
  45. managed_shared_memory managed_shm(create_only, test::get_process_id_name(), 10000*sizeof(std::size_t));
  46. #else
  47. //->
  48. managed_shared_memory managed_shm(create_only, "MySharedMemory", 10000*sizeof(std::size_t));
  49. //<-
  50. #endif
  51. //->
  52. //Construct objects
  53. my_class *named_object = managed_shm.construct<my_class>("Object name")[1]();
  54. my_class *unique_object = managed_shm.construct<my_class>(unique_instance)[2]();
  55. my_class *anon_object = managed_shm.construct<my_class>(anonymous_instance)[3]();
  56. //Now test "get_instance_name" function.
  57. assert(0 == std::strcmp(managed_shared_memory::get_instance_name(named_object), "Object name"));
  58. assert(0 == std::strcmp(managed_shared_memory::get_instance_name(unique_object), typeid(my_class).name()));
  59. assert(0 == managed_shared_memory::get_instance_name(anon_object));
  60. //Now test "get_instance_type" function.
  61. assert(named_type == managed_shared_memory::get_instance_type(named_object));
  62. assert(unique_type == managed_shared_memory::get_instance_type(unique_object));
  63. assert(anonymous_type == managed_shared_memory::get_instance_type(anon_object));
  64. //Now test "get_instance_length" function.
  65. assert(1 == managed_shared_memory::get_instance_length(named_object));
  66. assert(2 == managed_shared_memory::get_instance_length(unique_object));
  67. assert(3 == managed_shared_memory::get_instance_length(anon_object));
  68. managed_shm.destroy_ptr(named_object);
  69. managed_shm.destroy_ptr(unique_object);
  70. managed_shm.destroy_ptr(anon_object);
  71. return 0;
  72. }
  73. //]
  74. #include <boost/interprocess/detail/config_end.hpp>