关于内存泄漏,多态,继承~~~~~~~~~~~~~~~~~~~

star119119 2007-10-26 10:21:06
#include <list>
using namespace std;

class A
{
public :
virtual void Print(){ printf("A::Print()\n");};
int i;
int j;
};

class B:public A
{
public :
void Print(){ printf("B::Print()\n");};
int m;
int n;
};
list<A*> l;
void fun()
{
A* b=new B();
l.push_back(b);
}
int main()
{
fun();

(*l.begin())->Print();
delete (*l.begin()); ///----->>会引起潜在的内存泄漏么?
return 0;
}

PS:虚拟继承的时候,使用基类指针指向子类,这样会删除一部分多余的部分。
这个时候delete这个父类指针,会不会引起潜在的内存泄漏呢?
...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
star119119 2007-10-26
  • 打赏
  • 举报
回复
你连析构函数都没有定义,这个不好说啊

如果你定义的虚析构应该不会存在
=======================

系统 得代码里面有

我这里是简略代码。

谢谢各位
飞哥 2007-10-26
  • 打赏
  • 举报
回复
你连析构函数都没有定义,这个不好说啊

如果你定义的虚析构应该不会存在
zyb758 2007-10-26
  • 打赏
  • 举报
回复
使用virtual destructor,可以防止delete 父类指针造成的内存泄漏。
star119119 2007-10-26
  • 打赏
  • 举报
回复
B类中 NEW出来的int m; int n;部分内存是不是也会释放呢?
深度探索C++对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer和references来支持多态,这种程序风格就称为"面向对象"。   在单一继承的体系中,虚函数机制是一种很有效率的机制。我们判断一个类是否支持多态,只需要看它有没有虚函数便可以了。   当编译一个C++程序时,计算机的内存被分成了4个区域,一个包括程序的代码,一个包括所有的全局变量,一个是堆栈,还有一个是堆(heap),我们称堆是自由的内存区域,我们可以通过new和delete把对象放在这个区域。你可以在任何地方分配和释放自由存储区。但是要注意因为分配在堆中的对象没有作用域的限制,因此一旦new了它,必须delete它,否则程序将崩溃,这便是内存泄漏。(C#已经通过内存托管解决了这一令人头疼的问题)。C++通过new来分配内存,new的参数是一个表达式,该表达式返回需要分配的内存字节数,这是我以前掌握的关于new的知识,下面看看通过这本书,使我们能够更进一步的了解到些什么。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧