读书人

关于 C++ 实现static 成员 何时候析构

发布时间: 2012-09-25 09:55:59 作者: rapoo

关于 C++ 实现static 成员 何时候析构的问题 .
有个类用上了单例模式
class A
{
private:
static A* _instance;
public:
static A* GetInstance();
virtual ~A();
};

请问这个 A::_instance 如何释放?

如果这样写:
~A()
{
if(_instance)
{
delete _instance; _instance = NULL;
}
}

会造成 ~A() 函数的递归。

看网上有个思路,改造 class A 如下:
class A
{
private:
static A* _instance;
public:
static A* GetInstance();
virtual ~A();

class CGarbo
{
public:
~CGarbo()
{
// 在这里回收 _instance
delete _instance; _instance = NULL;
}
};
// 定义一个 static 成员,据说这个成员会在程序结束后进入 析构函数
static CGarbo _garbo;
};

现在的问题是,我按照上面的代码做 ,CGarbo 类的析构函数不会进去。
不知道哪里做错了。

请各位赐教~

不知道各位看的清楚我的问题没有,如果我没说清楚,就回帖告诉我,我继续完善描述。
谢谢!


[解决办法]
这种情况我没有遇到过。帮楼主顶贴吧,看哪位明白人能解答下。小弟也学习学习。
[解决办法]
之前看错了,抱歉
-----------------
对于static 成员是个指针, 中间 new 过, 以后也不用管吗? 这样不会造成内存泄露吗 ?
比如有 int *p = new int();
这种情况可以在析构函数里面直接调用 delete p;
[解决办法]
void fnExit (void);
class A
{
private:
friend void fnExit (void);
static A* _instance;
public:
static A* GetInstance();
virtual ~A();
};


void fnExit1 (void)
{
delete A::_instance;
A::_instance = NULL;
}


int main ()
{
atexit (fnExit1);
return 0;
}
[解决办法]
用 atexit

C/C++ code
void fnExit (void);class A{private:  friend void fnExit (void);  static A* _instance;public:  static A* GetInstance();  virtual ~A();};void fnExit1 (void){  delete A::_instance;    A::_instance = NULL;}int main (){  atexit (fnExit1);     return 0;} 

读书人网 >C++

热点推荐