设计模式之单例模式

应用见“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里申请的内存。
posted @ 2019-10-28 10:07  N_zero  阅读(155)  评论(0)    收藏  举报