李锦俊(mybios)的blog

游戏开发 C++ Cocos2d-x OpenGL DirectX 数学 计算机图形学 SQL Server

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

公告

QQ:30743734
EMain:mybios@qq.com

常用链接

留言簿(16)

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 362263
  • 排名 - 66

最新评论

阅读排行榜

评论排行榜

以前用VS 6和VS2003,类向导生成的都是虚析构函数,但是到了VS2005,默认就不是虚析构函数了。
这会带来什么问题?我今天就遇到了一次。当我用VS2005类向导生成一个类,如
class BaseClass
{
public:
    BaseClass(){};
   ~BaseClass(){};
   virtual void VFun() = 0;
}

然后,再生成一个类继承于他
class ProblemClass : public BaseClass
{
public:
    ProblemClass (){};
   ~ProblemClass (){};
   virtual void VFun(){};
}

然后,执行以下代码:

BaseClass *pClass = new ProblemClass ;
delete pClass ;

如无以外,在delete的时候就会出现堆错误
posted on 2006-12-31 15:51 李锦俊(mybios) 阅读(5892) 评论(7)  编辑 收藏 引用 所属分类: VC Debug

Feedback

# re: VS2005类向导的问题 2006-12-31 16:37 LOGOS
基类析构函数,virtual之  回复  更多评论
  

# re: VS2005类向导的问题 2006-12-31 20:37 李锦俊
@LOGOS
谢谢。吸取教训了  回复  更多评论
  

# re: VS2005类向导的问题 2007-01-02 14:54 Pixar
没有2005,但是不懂为什么会出现堆错误,2003好像相同的代码是没用问题的,求详解
class A
{
public:
A(){ };
~A(){ };
virtual void VFun() = 0;

};
class B :public A
{
public:
B(){};
~B(){};
virtual void VFun(){};
};
int _tmain(int argc, _TCHAR* argv[])
{
A *pA= new B;
delete pA;
pA= NULL;

return 0;
}

  回复  更多评论
  

# re: VS2005类向导的问题 2007-01-02 16:28 李锦俊
#include <windows.h>

class A
{
public:
A(){ };
~A(){ };
virtual void VFun() = 0;

};
class B :public A
{

public:
B()
{
MessageBox(0 , "申请内存" , 0 , 0);
m_pBuff = new char[256];
};
~B()
{
MessageBox(0 , "析放内存" , 0 , 0);
delete []m_pBuff;
};
virtual void VFun(){};
protected:
char *m_pBuff;
};
int _tmain(int argc, _TCHAR* argv[])
{
A *pA= new B;
delete pA;
pA= NULL;

return 0;
}

是这样的。释放内存不会被调用。  回复  更多评论
  

# re: VS2005类向导的问题 2007-01-02 20:58 Pixar
哦,你的意思只是内存泄漏而不是什么执行时有什么报异常。我说呢,呵呵  回复  更多评论
  

# re: VS2005类向导的问题 2007-01-02 21:43 李锦俊
要启用了内存泄漏检测并且在Debug编译才会报异常的,Release不会。刚建立的Win32工程没有启用  回复  更多评论
  

# re: VS2005类向导的问题 2007-02-22 14:15 空明流转
有个钩子钩上就好了。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理