new对象之后不delete然后结束程序能自动释放空间?

xbox1994 2014-05-24 04:27:35
template<class DataType>
ALGraph<DataType>::~ALGraph()
{
for(int i=0;i<vertexNum;i++)
{
ArcNode *p=adjlist[i].firstedge;
ArcNode *pp;
while(NULL!=p)
{
pp=p->next;
delete p;
p=pp;
}
}
cout<<"delete"<<endl;
}

void main()
{
int a[]={0,1,2,3,4,5};
ALGraph<int> *g=new ALGraph<int>(a,5,5);
}

关键代码如上,没有执行析构函数,难道这部分内存就泄漏了吗?
...全文
5766 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2016-11-29
  • 打赏
  • 举报
回复 2
进程退出了,操作系统会帮你做后续收尾的工作~
xiaohuh421 2016-11-29
  • 打赏
  • 举报
回复 7
new 之后, 如果不delete. 那么在进程未结束之前, 这些内存就泄漏了, 不系统不能回收它. 当进程结束时, 进程所分配的内存会被系统回收, 但仅仅是回收内存, 系统并不关心你程序里面是如何使用它的, 也就是说, 它并不会像楼主想的那个, 系统回收内存的时候, 还会调用析构函数. 只有程序内部调用delete才会调用析构函数. delete过程实际是这样的. (假设delete的是一个对象指针) 首先: 调用对象的析构函数 然后: 调用free类似的内存释放函数, 告诉系统, 这块内存我用完了, 还给你. 在进程结束时应该是这样: 系统说: 你都死了, 东西全部归国有.
赵4老师 2016-11-29
  • 打赏
  • 举报
回复 1
百度搜“进程管理”
Crawl.W 2016-11-28
  • 打赏
  • 举报
回复 9
每个程序出生时都会向国家(操作系统)请一个自己的地盘,不管其中发生了什么情况,程序死了,那土地充公。
houen 2014-05-24
  • 打赏
  • 举报
回复
严格点,只要new和没有对应的delete就是内存泄漏。但不同使用方法产生的危害程度不一样。 例如,如程序一运行就申请了一块内存,该内存一直使用,直到程序结束。 那有没有delete就不影响进程和系统。反正到最后都要回收的,delete回收还是系统回收都一样。 如果有一个类类似工厂,不停的生产对象,但没有用完释放就会不停的耗掉内存。
houen 2014-05-24
  • 打赏
  • 举报
回复
进程退出的回收是系统级的。和析构没有关系。
houen 2014-05-24
  • 打赏
  • 举报
回复 3
进程退出或回收说有的内存,但程序还在运行的时候你必须调用delete来回收,否则不停的new,进程占用内存会不停增加。
worldy 2014-05-24
  • 打赏
  • 举报
回复
引用 9 楼 xbox1994 的回复:
[quote=引用 8 楼 worldy 的回复:] ALGraph<int> *g=new ALGraph<int>(a,5,5); g没有delete肯定泄漏
百度百科上说 内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。 程序结束了内存单元不被占据了,也就是被释放了吗?[/quote] 确实如此,你的这种简单的应用似乎没什么大的危害,但是实际的程序会不断的申请内存释放内存,申请后如果没有释放不久系统就会崩溃
xbox1994 2014-05-24
  • 打赏
  • 举报
回复
引用 8 楼 worldy 的回复:
ALGraph<int> *g=new ALGraph<int>(a,5,5); g没有delete肯定泄漏
百度百科上说 内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。 程序结束了内存单元不被占据了,也就是被释放了吗?
worldy 2014-05-24
  • 打赏
  • 举报
回复
ALGraph<int> *g=new ALGraph<int>(a,5,5); g没有delete肯定泄漏
xbox1994 2014-05-24
  • 打赏
  • 举报
回复
到底有没有。。。
caewow 2014-05-24
  • 打赏
  • 举报
回复
引用 4 楼 xbox1994 的回复:
[quote=引用 3 楼 lis2012 的回复:] [quote=引用 楼主 xbox1994 的回复:]
template<class DataType>
ALGraph<DataType>::~ALGraph()
{
	for(int i=0;i<vertexNum;i++)
	{
		ArcNode *p=adjlist[i].firstedge;
		ArcNode *pp;
		while(NULL!=p)
		{
			pp=p->next;
			delete p;
			p=pp;
		}
	}
	cout<<"delete"<<endl;
}

void main()
{
	int a[]={0,1,2,3,4,5};
	ALGraph<int> *g=new ALGraph<int>(a,5,5);
}
关键代码如上,没有执行析构函数,难道这部分内存就泄漏了吗?
ALGraph<int> *g=new ALGraph<int>(a,5,5); 使用new申请的内存系统是不会主动回收的,需要手动删除,不然会造成内存泄露[/quote] 那程序结束后那块泄漏的内存还是没有被回收?[/quote] 操作系统会帮你回收这块内存
lis2012 2014-05-24
  • 打赏
  • 举报
回复
引用 4 楼 xbox1994 的回复:
[quote=引用 3 楼 lis2012 的回复:] [quote=引用 楼主 xbox1994 的回复:]
template<class DataType>
ALGraph<DataType>::~ALGraph()
{
	for(int i=0;i<vertexNum;i++)
	{
		ArcNode *p=adjlist[i].firstedge;
		ArcNode *pp;
		while(NULL!=p)
		{
			pp=p->next;
			delete p;
			p=pp;
		}
	}
	cout<<"delete"<<endl;
}

void main()
{
	int a[]={0,1,2,3,4,5};
	ALGraph<int> *g=new ALGraph<int>(a,5,5);
}
关键代码如上,没有执行析构函数,难道这部分内存就泄漏了吗?
ALGraph<int> *g=new ALGraph<int>(a,5,5); 使用new申请的内存系统是不会主动回收的,需要手动删除,不然会造成内存泄露[/quote] 那程序结束后那块泄漏的内存还是没有被回收?[/quote] 没有
xbox1994 2014-05-24
  • 打赏
  • 举报
回复
引用 3 楼 lis2012 的回复:
[quote=引用 楼主 xbox1994 的回复:]
template<class DataType>
ALGraph<DataType>::~ALGraph()
{
	for(int i=0;i<vertexNum;i++)
	{
		ArcNode *p=adjlist[i].firstedge;
		ArcNode *pp;
		while(NULL!=p)
		{
			pp=p->next;
			delete p;
			p=pp;
		}
	}
	cout<<"delete"<<endl;
}

void main()
{
	int a[]={0,1,2,3,4,5};
	ALGraph<int> *g=new ALGraph<int>(a,5,5);
}
关键代码如上,没有执行析构函数,难道这部分内存就泄漏了吗?
ALGraph<int> *g=new ALGraph<int>(a,5,5); 使用new申请的内存系统是不会主动回收的,需要手动删除,不然会造成内存泄露[/quote] 那程序结束后那块泄漏的内存还是没有被回收?
lis2012 2014-05-24
  • 打赏
  • 举报
回复
引用 楼主 xbox1994 的回复:
template<class DataType>
ALGraph<DataType>::~ALGraph()
{
	for(int i=0;i<vertexNum;i++)
	{
		ArcNode *p=adjlist[i].firstedge;
		ArcNode *pp;
		while(NULL!=p)
		{
			pp=p->next;
			delete p;
			p=pp;
		}
	}
	cout<<"delete"<<endl;
}

void main()
{
	int a[]={0,1,2,3,4,5};
	ALGraph<int> *g=new ALGraph<int>(a,5,5);
}
关键代码如上,没有执行析构函数,难道这部分内存就泄漏了吗?
ALGraph<int> *g=new ALGraph<int>(a,5,5); 使用new申请的内存系统是不会主动回收的,需要手动删除,不然会造成内存泄露
xbox1994 2014-05-24
  • 打赏
  • 举报
回复
引用 1 楼 houen_study 的回复:
内存是泄露了,但同时进程的结束回收了内存。 内存泄漏的问题是你在运行过程中不停的有申请内存,长时间运行后导致内存不足导致奔溃。 就一块内存,没有变化,并不影响长期运行,只是系统少了这么点而已。
既然回收了内存为什么没调用析构函数?
houen 2014-05-24
  • 打赏
  • 举报
回复
内存是泄露了,但同时进程的结束回收了内存。 内存泄漏的问题是你在运行过程中不停的有申请内存,长时间运行后导致内存不足导致奔溃。 就一块内存,没有变化,并不影响长期运行,只是系统少了这么点而已。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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