#ifndef _MY_SINGLETON__H__
#define _MY_SINGLETON__H__
#include <assert.h>
namespace Project
{
template <typename T> class SINGLETON
{
protected:
static T* m_singleton;
public:
SINGLETON(void)
{
assert(!m_singleton);
#if defined( _MSC_VER ) && _MSC_VER < 1200
int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
m_singleton = (T*)((int)this + offset);
#else
m_singleton = static_cast<T*>(this);
#endif
}
~SINGLETON(void)
{
assert(m_singleton);
m_singleton = 0;
}
static T& refenece(void)
{
assert(m_singleton);
return (*m_singleton);
}
static T* pointer(void)
{
return m_singleton;
}
};
}
#endif
使用方式如下:
class MainWindow : public QMainWindow, public Project::SINGLETON<MainWindow>
{
Q_OBJECT
public:
MainWindow(QWidget* parent = Q_NULLPTR);
virtual ~MainWindow();
void init();
void initScene();
}
在这里new一个对象,先构造父类
stdshared_ptrMainWindow main_window = stdmake_sharedMainWindow();
这样全局调用
int a=MainWindow::pointer()-> initScene();