bughunt: attempt to rebuild the problematic structure stand-alone... --> MISS
this is only a stripped-down version of the basic singleton, without the indirection. Unsurprisingly, this doesn't exhibit the problem yet
This commit is contained in:
parent
0e8a1f1e08
commit
675b2070ce
4 changed files with 28 additions and 16 deletions
|
|
@ -14,7 +14,7 @@ envR.Append(CPPPATH='research')
|
|||
|
||||
# build additional test and administrative tools....
|
||||
experiments = [ envR.Program('try', ['try.cpp'] + support_lib) #### to try out some feature...
|
||||
, envR.Program('clang-static-init', ['clang-static-init-1.cpp', 'clang-static-init-2.cpp'] + core)
|
||||
, envR.Program('clang-static-init', ['clang-static-init-1.cpp', 'clang-static-init-2.cpp'])
|
||||
]
|
||||
|
||||
#
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
#include "lib/test/run.hpp"
|
||||
|
||||
#include "clang-static-init.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
using ::test::Test;
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
|
|
@ -16,7 +14,7 @@ main (int, char**)
|
|||
{
|
||||
cout << "\n.gulp.\n";
|
||||
|
||||
Subject& ref1 = fab();
|
||||
Subject& ref1 = fab.get();
|
||||
Subject& sub2 = test::fabricate();
|
||||
|
||||
cout << "sub1="<< &ref1 << " sub2="<< &sub2 <<"\n";
|
||||
|
|
|
|||
|
|
@ -20,16 +20,16 @@ namespace test {
|
|||
|
||||
|
||||
namespace {
|
||||
lib::singleton::UseSubclass<Subject> typeID;
|
||||
//
|
||||
}
|
||||
|
||||
Factory fab(typeID);
|
||||
AccessPoint fab;
|
||||
|
||||
|
||||
Subject&
|
||||
fabricate()
|
||||
{
|
||||
return fab();
|
||||
return fab.get();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
|
||||
#include "lib/error.hpp"
|
||||
|
||||
#include "lib/singleton-subclass.hpp"
|
||||
|
||||
|
||||
namespace test {
|
||||
|
||||
template<typename T>
|
||||
template<typename T
|
||||
,template <class> class Fac
|
||||
>
|
||||
struct Holder
|
||||
{
|
||||
static T* instance;
|
||||
|
|
@ -16,15 +14,31 @@ namespace test {
|
|||
{
|
||||
if (!instance)
|
||||
{
|
||||
instance = new T();
|
||||
instance = Fac<T>::create();
|
||||
}
|
||||
return *instance;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
template<typename T
|
||||
,template <class> class F
|
||||
>
|
||||
T* Holder<T,F>::instance;
|
||||
|
||||
|
||||
|
||||
template<typename T>
|
||||
T* Holder<T>::instance;
|
||||
struct Factory
|
||||
{
|
||||
static T*
|
||||
create()
|
||||
{
|
||||
return new T();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct Subject
|
||||
{
|
||||
|
|
@ -34,9 +48,9 @@ namespace test {
|
|||
|
||||
};
|
||||
|
||||
typedef lib::SingletonSub<Subject> Factory;
|
||||
typedef Holder<Subject,Factory> AccessPoint;
|
||||
|
||||
extern Factory fab;
|
||||
extern AccessPoint fab;
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue