64,643
社区成员
发帖
与我相关
我的任务
分享
static ClassName * instance()
{
static ClassName inst;
return &inst;
}
ClassName *p = ClassName::instance();
就行了。terminate called after throwing an instance of '__gnu_cxx::recursive_init_error'
what(): std::exception
#pragma once
/*
* SingleA.h
* */
#include <iostream>
#include "SingleB.h"
class SingleB;
class SingleA
{
public:
static SingleA * instance()
{
static SingleA inst;
return &inst;
}
void print();
void callback();
private:
SingleB *_b;
SingleA();
SingleA(const SingleA&);
SingleA & operator= (const SingleA&);
};
#pragma once
/*
* SingleB.h
* */
#include <iostream>
#include "SingleA.h"
class SingleA;
class SingleB
{
public:
static SingleB * instance()
{
static SingleB inst;
return &inst;
}
void print();
private:
SingleA *_a;
SingleB();
SingleB(const SingleB&);
SingleB & operator= (const SingleB&);
};
/*
* SingleA.cpp
* */
#include "SingleA.h"
SingleA::SingleA()
{
_b = SingleB::instance();
}
void SingleA::print()
{
std::cout << "SingleA.print()" << std::endl;
_b->print();
}
void SingleA::callback()
{
std::cout << "SingleA.callback()" << std::endl;
}
/*
* SingleB.cpp
* */
#include "SingleB.h"
SingleB::SingleB()
{
_a = SingleA::instance();
}
void SingleB::print()
{
std::cout << "SingleB.print()" << std::endl;
_a->callback();
}
/*
* testSingleton.cpp
* */
#include "SingleA.h"
#include "SingleB.h"
int main()
{
SingleA *a = SingleA::instance();
a->print();
return 0;
}