次の方法でシングルトン C++ を作成します。
class A {
private:
static A* m_pA;
A();
virtual ~A();
public:
static A* GetInstance();
static void FreeInstance();
void WORK1();
void WORK2();
void WORK3();
}
}
A* A::GetInstance() {
if (m_pA == NULL)
m_pA = new A();
return m_pA;
}
A::~A() {
FreeInstance() // Can I write this? are there any potential error?
}
void A::FreeInstance() {
delete m_pA;
m_pA = NULL;
}
ありがとう!Evan Teran と sep61.myopenid.com の答えは正しく、本当に良いです! 私のやり方は間違っています。そのようなコードを書いている人なら誰でも私のばかげた間違いを避けることができれば幸いです。
私のプロジェクトのシングルトン A にはスマート ポインターのベクトルがあり、別のスレッドでもこのベクトルを編集できるため、アプリケーションを閉じると、CMutex をたくさん追加しても常に不安定になります。マルチスレッド エラー + シングルトン エラーで 1 日無駄になりました。
//------------------------------------------------ ----------- 新しいシングルトンです。次のサンプルに問題があると思われる場合は、自由に編集してください。
class A {
private:
static A* m_pA;
explicit A();
void A(const A& a);
void A(A &a);
const A& operator=(const A& a);
virtual ~A();
public:
static A* GetInstance();
static void FreeInstance();
void WORK1();
void WORK2();
void WORK3();
}
}
A* A::GetInstance() {
if (m_pA == NULL){
static A self;
m_pA = &self;
}
return m_pA;
}
A::~A() {
}