读书人

关于singleton形式的一个疑问

发布时间: 2013-03-20 15:25:24 作者: rapoo

关于singleton模式的一个疑问
在看singleton模式时,代码如下:


#include <iostream>

using namespace std;

class singleton
{
public:
static singleton* instance();
~singleton(){cout << "~singleton()" << endl; }
void print() {cout << "print()" << endl;}

protected:
singleton();

private:
static singleton *_instance;
};

singleton* singleton::_instance = 0;
singleton::singleton()
{
cout << "singleton()" << endl;
}

singleton* singleton::instance()
{
if (_instance == 0)
{
_instance = new singleton();
}

return _instance;
}

int main()
{
singleton *sgn = singleton::instance();
delete sgn; //??

sgn->print();

return 0;
}

就是客服端的那个sgn难道不是指向static singleton *_instance吗?
我有两个问题:
1,为什么我执行delete不报错啊,按道理delete一个static的指针会报错的啊?
2,为什么我delete掉sgn后,居然sgn->print()还可以打印出来啊?

[解决办法]
1. 啥子道理说的 static 的指针不能 delete? 只要是 new 的就需要 delete
2. 不报错是因为你的 print 函数里没有使用 this 指针. 你试着在里面访问以下类的成员就会报错了.
[解决办法]
1,new/delete必须匹配出现,否则容易造成内存泄露或者未定义行为,跟你的static没有关系
2,,是可以执行的,如果是在对它进行内存数据操作,会崩掉。
[解决办法]
我再补充两句,能不用Singleton就不用。

读书人网 >C++

热点推荐