特别注意单例模式c++实现在main.cpp中引用的时候要去申明下:
Singleton * Singleton::m_Instance = NULL; //定义性声明
不然会报错:无法解析的外部符号 "private: static class Singleton * Singleton::m_Instance" 之类的。
以下是一个很简单的单例模式的测试demo,这个模式并没有考虑并发的问题。如果是并发,可以考虑在创建对象的时候加锁
stdafx.h
#pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> #include <iostream> using namespace std;
Singleton.h
#pragma once #include "stdafx.h" class Singleton { public: static Singleton * GetInstance(); void Add(); void MyPrint(string str); private: Singleton(); ~Singleton(); static Singleton * m_Instance; int intNum; };
Singleton.cpp
#include "stdafx.h" #include "Singleton.h" Singleton* Singleton::GetInstance() { if (m_Instance == NULL) { m_Instance = new Singleton(); } return m_Instance; } void Singleton::MyPrint(string str) { printf("%s ",str.c_str()); } void Singleton::Add() { intNum++; printf("intNum=%d ", intNum); } Singleton::Singleton() { intNum = 0; } Singleton::~Singleton() { }
main.cpp
// c++单例模式 2016/1/7 dgx #include "stdafx.h" #include "Singleton.h" Singleton * Singleton::m_Instance = NULL; //定义性声明 int main(int argc, char *argv[]) { Singleton *singletonObj = Singleton::GetInstance(); singletonObj->MyPrint("Hello Singleton!"); singletonObj->Add(); for (int i = 0; i < 10; i++) { Singleton * singletonObj2 = Singleton::GetInstance(); singletonObj2->Add(); } getchar(); return 0; }