析构函数的调用问题
调用析构函数可以释放内存。一个问题是,如果int*p=newint(1);然后删除p会释放内存;那如果将p指向别的地方,是不是内存就一直不释放?...
调用析构函数可以释放内存。一个问题是,如果int* p=new int(1);然后删除p会释放内存;那如果将p指向别的地方,是不是内存就一直不释放?
展开
3个回答
展开全部
为变量分配内存时可以选择分配在栈上,也可以分配在堆上。
栈是程序运行时就分配好的一块内存空间,这里一般存放临时变量,比如你在函数内定义了一个变量int a = 0;a就是分配在栈上了。这种变量不需要你去销毁,程序运行时随时去重复利用这些内存。
堆是一大块未分配的空间,你可以把你的变量分配在堆上,如int *a = new int(1);这就在堆上分配的一块int型大小的内存,用指针a指向这块内存。
析构函数正常情况下什么也不做,析构函数的作用是给你一个机会去手动释放你在堆上分配的内存。如果你在析构函数里面delete 掉你的内存,那析构时会自动执行这句,释放掉内存。但如果你不写这句,在程序结束之前这块内存是不会被释放的,你若将p指向其它地方,那这块内存就泄漏掉了。
当然如果你的程序很小,等到程序结束也不会有很多内存泄漏,这些问题当然没有影响。但如果程序运行时间很长,程序很大,那就要注意了。
delete 应该加上,一个合格的程序员应该去关心每一个需要delete的内存,将所有情况都掌握在自己手中,而不是寄希望于系统。
栈是程序运行时就分配好的一块内存空间,这里一般存放临时变量,比如你在函数内定义了一个变量int a = 0;a就是分配在栈上了。这种变量不需要你去销毁,程序运行时随时去重复利用这些内存。
堆是一大块未分配的空间,你可以把你的变量分配在堆上,如int *a = new int(1);这就在堆上分配的一块int型大小的内存,用指针a指向这块内存。
析构函数正常情况下什么也不做,析构函数的作用是给你一个机会去手动释放你在堆上分配的内存。如果你在析构函数里面delete 掉你的内存,那析构时会自动执行这句,释放掉内存。但如果你不写这句,在程序结束之前这块内存是不会被释放的,你若将p指向其它地方,那这块内存就泄漏掉了。
当然如果你的程序很小,等到程序结束也不会有很多内存泄漏,这些问题当然没有影响。但如果程序运行时间很长,程序很大,那就要注意了。
delete 应该加上,一个合格的程序员应该去关心每一个需要delete的内存,将所有情况都掌握在自己手中,而不是寄希望于系统。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询