关于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就不用。