mirror of
https://github.com/boostorg/interprocess.git
synced 2026-01-19 04:12:13 +00:00
Interprocess:
[@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]
This commit is contained in:
93
test/intermodule_singleton_test.cpp
Normal file
93
test/intermodule_singleton_test.cpp
Normal file
@@ -0,0 +1,93 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (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>
|
||||
|
||||
Reference in New Issue
Block a user