| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1096 人关注过本帖
标题:[求助]Singleton Pattern类定义中,析构函数为什么定义成虚函数?
取消只看楼主 加入收藏
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
 问题点数:0 回复次数:2 
[求助]Singleton Pattern类定义中,析构函数为什么定义成虚函数?
<<Design Pattern>> 一书中,Singleton Pattern类定义时把析构函数写成虚函数,析构函数为什么要是虚函数?
总是想不明白,各位仁兄能解释一下吗?

下面是Singleton Pattern的类定义,

class CSingletonAutoPtr
{
private:
static auto_ptr<CSingletonAutoPtr> m_auto_ptr;
static CSingletonAutoPtr* m_instance;
protected:
CSingletonAutoPtr();
CSingletonAutoPtr(const CSingletonAutoPtr&);
virtual ~CSingletonAutoPtr();
//allow auto_ptr to delete, using protected ~CSingletonAutoPtr()
friend class auto_ptr<CSingletonAutoPtr>;
public:
static CSingletonAutoPtr* GetInstance();
void Test();
};
搜索更多相关主题的帖子: Singleton Pattern 成虚 函数 定义 
2006-09-19 17:07
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 

感谢各位的热情帮助
但只有虚基类才有必要用虚析构函数,这是为了应用"虚基类指针指向派生类对象"这一特性时正确调用各级析构函数.
但在这个类中:
class CSingletonAutoPtr
{
private:
static auto_ptr<CSingletonAutoPtr> m_auto_ptr;
static CSingletonAutoPtr* m_instance;
protected:
CSingletonAutoPtr();
CSingletonAutoPtr(const CSingletonAutoPtr&);
virtual ~CSingletonAutoPtr();
//allow auto_ptr to delete, using protected ~CSingletonAutoPtr()
friend class auto_ptr<CSingletonAutoPtr>;
public:
static CSingletonAutoPtr* GetInstance();
void Test();
};
只把析构函数定义为虚函数而没有其他虚函数接口,所以我当时觉得没有必要,因为这样的话用"虚基类指针指向派生类对象"就没有多少意义了。


谷底深深行 ,峰顶漫漫步......@_@
2006-09-20 12:08
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
不过从使用类库的用户来说,用虚析构函数更安全,这是我当初没有考虑到的,真的很感谢各位的提醒与指导!谢谢!

谷底深深行 ,峰顶漫漫步......@_@
2006-09-20 12:14
快速回复:[求助]Singleton Pattern类定义中,析构函数为什么定义成虚函数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030776 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved