关于 C++ 实现static 成员 何时候析构的有关问题
关于 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
有个类用上了单例模式
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;
}