我有一个如下实现的单例类。
#include <iostream>
using namespace std;
template<class T>
class singleton{
protected:
static T* s_instance;
public:
T* instance(){
if(s_instance){
return s_instance ;
}else{
s_instance = new T;
return s_instance;
}
}
};
template <class T>
T* singleton<T>::s_instance;
class A:public singleton<A>{
friend class singleton;
public:
void print_add(){
cout<<"I AM A"<<endl;
cout<<s_instance<<endl;
}
~A(){
//delete s_instance;
cout<<"Dest A"<<endl;
}
private:
A(){}
};
class B:public singleton<B>{
friend class singleton;
public:
void print_add(){
cout<<"I AM B"<<endl;
cout<<s_instance<<endl;
}
~B(){
cout<<"Dest B"<<endl;
//delete s_instance;
}
private:
B(){}
};
int main(){
A* a, *c;
B* b;
a->instance()->print_add();
b->instance()->print_add();
c->instance()->print_add();
}
如何为此调用析构或。看起来上面没有“删除”行,valgrind 显示 0 个内存泄漏。不删除指针,我是否泄漏了内存?还是实现单例的方法不对?对于这两个类,我们有一个共同的静态成员。基本上这里的不同对象的静态成员有何不同?
谢谢