mirror of
https://github.com/boostorg/interprocess.git
synced 2026-01-19 16:22:19 +00:00
[@https://svn.boost.org/trac/boost/ticket/3439 #3439], [@https://svn.boost.org/trac/boost/ticket/3846 #3846], [@https://svn.boost.org/trac/boost/ticket/3947 #3947], [@https://svn.boost.org/trac/boost/ticket/3985 #3985]. Intrusive: [@https://svn.boost.org/trac/boost/ticket/3668 #3668], [@https://svn.boost.org/trac/boost/ticket/3339 #3688], [@https://svn.boost.org/trac/boost/ticket/3698 #3698], [@https://svn.boost.org/trac/boost/ticket/3706 #3706], [@https://svn.boost.org/trac/boost/ticket/3721 #3721]. [@https://svn.boost.org/trac/boost/ticket/3729 #3729], [@https://svn.boost.org/trac/boost/ticket/3746 #3746], [@https://svn.boost.org/trac/boost/ticket/3781 #3781], [@https://svn.boost.org/trac/boost/ticket/3829 #3829], [@https://svn.boost.org/trac/boost/ticket/3840 #3840], [@https://svn.boost.org/trac/boost/ticket/3339 #3339], [@https://svn.boost.org/trac/boost/ticket/3419 #3419], [@https://svn.boost.org/trac/boost/ticket/3431 #3431], [SVN r60515]
94 lines
1.9 KiB
C++
94 lines
1.9 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// (C) Copyright Ion Gaztanaga 2004-2009. 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/intermodule_singleton.hpp>
|
|
#include <iostream>
|
|
|
|
using namespace boost::interprocess;
|
|
|
|
class MyClass
|
|
{
|
|
public:
|
|
MyClass()
|
|
{
|
|
std::cout << "Constructor\n";
|
|
}
|
|
|
|
void shout() const
|
|
{
|
|
std::cout << "Shout\n";
|
|
}
|
|
|
|
~MyClass()
|
|
{
|
|
std::cout << "Destructor\n";
|
|
}
|
|
};
|
|
|
|
class MyDerivedClass
|
|
: public MyClass
|
|
{};
|
|
|
|
class MyThrowingClass
|
|
{
|
|
public:
|
|
MyThrowingClass()
|
|
{
|
|
throw int(0);
|
|
}
|
|
};
|
|
|
|
|
|
|
|
int main ()
|
|
{
|
|
bool exception_thrown = false;
|
|
bool exception_2_thrown = false;
|
|
try{
|
|
detail::intermodule_singleton<MyThrowingClass>::get();
|
|
}
|
|
catch(int &){
|
|
exception_thrown = true;
|
|
//Second try
|
|
try{
|
|
detail::intermodule_singleton<MyThrowingClass>::get();
|
|
}
|
|
catch(interprocess_exception &){
|
|
exception_2_thrown = true;
|
|
}
|
|
}
|
|
|
|
if(!exception_thrown || !exception_2_thrown){
|
|
return 1;
|
|
}
|
|
|
|
MyClass & mc = detail::intermodule_singleton<MyClass>::get();
|
|
mc.shout();
|
|
detail::intermodule_singleton<MyClass>::get().shout();
|
|
detail::intermodule_singleton<MyDerivedClass>::get().shout();
|
|
|
|
//Second try
|
|
exception_2_thrown = false;
|
|
try{
|
|
detail::intermodule_singleton<MyThrowingClass>::get();
|
|
}
|
|
catch(interprocess_exception &){
|
|
exception_2_thrown = true;
|
|
}
|
|
if(!exception_2_thrown){
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#include <boost/interprocess/detail/config_end.hpp>
|
|
|