设计模式之单例模式
应用见“zlog封装”。
#pragma once class Singleton { public: ~Singleton(); static Singleton *Instance(); void test(); protected: Singleton(); private: static Singleton *instance_; };
#include "Singleton.h" #include <iostream> Singleton *Singleton::instance_ = 0; Singleton::Singleton() { std::cout << "Singleton..." << std::endl; } Singleton::~Singleton() {
/*
// 内存释放
if (instance_) { delete instance_; instance_ = NULL; }
*/
} Singleton * Singleton::Instance() { if (instance_ == 0) { instance_ = new Singleton(); } return instance_; } void Singleton::test() { std::cout << "test." << std::endl; return; }
测试
#include <iostream> #include "Singleton.h" #include "test.h" Singleton *sgn = Singleton::Instance(); int main() { sgn->test();
delete sgn;
sgn = NULL:
std::cout << "Hello World!\n"; }
如上,初期我没有注意到内存释放问题。后发现,在单例类的析构函数里进行了内存释放。但是对代码进行内存泄漏检测,依然发现内存泄漏。
static Singleton *Instance();
这是一个静态的成员函数,如果要释放instance_,需要重新写一个静态的释放函数,用来释放Instance里申请的内存。

浙公网安备 33010602011771号