次のように実装されたシングルトンクラスがあります。
#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();
}
このために destruct-or を呼び出す方法。上記の「削除」行がないと、valgrind はメモリ リークが 0 であるように見えます。ポインターを削除せずに、メモリをリークしていますか? またはシングルトンの実装方法が間違っていますか?これら 2 つのクラスには、共通の静的メンバーがあります。基本的に、ここでオブジェクトごとに静的メンバーがどのように異なるのですか?
ありがとう