インスタンス破棄の方法
今日(もう昨日か)、業務で既存のコードを改造してて、ちょっと現実装に疑問を持ったのでメモ。ちなみに言語はC++。
以下のようなSingltonパターンで実装されたクラスがあったとします。
#元ネタは私が設計したクラスじゃないので質疑は却下。
class SmplCls
{
public:
virtual ~SmplCls();
static SmplCls* instance ();
static void release ();
protected:
SmplCls();
private:
SmplCls(const SmplCls &right);
SmplCls & operator=(const SmplCls &right);
static SmplCls* m_SmplCls;
}
// インスタンス生成
SmplCls* SmplCls::instance()
{
if (m_SmplCls == 0)
{
m_SmplCls = new SmplCls();
}
return m_SmplCls;
}
// インスタンス破棄
void SmplCls::release()
{
if (m_SmplCls != 0)
{
delete m_SmplCls;
m_SmplCls = 0;
}
}
他のクラスからインスタンスを取得したいときは
SmplCls::instance();
で良いとして、インスタンス破棄の際に
SmplCls::instance()->release();
ってゆーのはアリなんだろうか?
取得したインスタンスからコールしたメソッド内で、インスタンスを破棄って…
最悪エラーになったりしないの???
#自分はてっきり「SmplCls::release();」の様に使用されてると思ってました;
上記クラスをコールするよう実装したら、デバッグ中断でエラーログ吐きまくるんで、物凄く気になってます。
…誰か助言くださいまし。お願いします(T_T)
0 個のコメント:
コメントを投稿