2 qhdwangli qhdwangli 于 2016.01.13 18:43 提问

new生成变量不释放是否会造成内存泄露

MFC中的对话框初始化函数有以下代码,
其中用new生成的东西,不释放是否会造成内存泄露?
如果会造成内存泄露,改怎样处理?
好多书上经常这么用,也没看到在哪里释放了。

 HDITEM item;   
item.cxy=200;   
item.mask=HDI_WIDTH;   
m_propertyGrid.GetHeaderCtrl().SetItem(0, new HDITEM(item));   

CMFCPropertyGridProperty *pProp1 = new CMFCPropertyGridProperty(  
    _T("普通文字"),    
    _T("显示正确"),    
    _T("这是描述部分"));     

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.13 18:47
已采纳

mfc肯定会的。一般来说,应该在析构函数中释放变量。

caozhy
caozhy 回复qhdwangli: 智能指针只是解决了一部分的问题,从语法层面上来说,没有垃圾回收机制的C++其实无解。
2 年多之前 回复
qhdwangli
qhdwangli 那就太麻烦了,要保存很多指针。程序结束也不会自动释放吗?用智能指针是否能自动释放?
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.13 18:48

很多图书都是找大学生胡乱写的代码,根本不靠谱。new一定要和delete成对出现。

fk002008
fk002008   2016.01.13 19:13

c和c++动态生成的地址空间是不会自动释放的。
这可不是java
所以new要和delete配对
不然肯定内存泄露

Royal_lr
Royal_lr   Ds   Rxr 2016.01.14 09:37

c++肯定要自己释放内存的,,不然肯定会泄漏的

qhdwangli
qhdwangli 微软很多例程也是这么写的,尤其是mfc的例程,也没看到在哪里释放的。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
js内存泄露的几种情况
想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除。这里只讨论那些不经意间的内存泄露。 一、什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在C++中,因为是手动管理内存,内存泄露是经常出现的事情。而现在流行的C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露。浏览
C++ vector变量等导致内存泄露问题的解决方法
之前在做一个音频特征提取的批量处理程序,老是出现内存泄露问题,用Visual Leak Detector(VLD)工具做了下检测,检测出了一些问题,解决后还是会有问题。之后继续排查,因为我的代码中,大量的音频相关处理的数据都存成了vector变量,推测是不是vector变量的析构问题,上网查了些资料,现写出解决过程: 1、关于Visual Leak Detector的配置与使用 主要也
静态方法会导致内存泄漏吗?
原文地址:http://www.iteye.com/problems/73667 我喜欢把一些常用的或者公共方法放到一个工具类里,写成静态(static)的形式,方便调用,但是如果这个方法需要传递一个参数(外部短生命周期对象的引用)的话,会不会造成内存泄漏啊?比如:  Java代码   public static void getXXX(Object o){  
Android中使用Thread造成内存泄露的分析和解决
Thread 内存泄露线程也是造成内存泄露的一个重要的源头。线程产生内存泄露的主要原因在于线程生命周期的不可控。看一下下面是否存在问题 public class ThreadActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreat
指针未释放导致内存泄漏的坑
我已经两次因为不恰当的省略go中的函数返回值,一次造成MySql的too many connection错误,一次造成严重的内存泄漏。所以在这里大家分享一下这个问题和解决办法,也提醒自己以后不要再犯类似的错了。 众所周知,go中的函数可以返回多个值。但很多时候我们并不需要所有的值,而且go中定义了一个变量必须使用才可以,不然会报错。所以对于不需要的返回值,一般的操作方法就是省略:
go内存泄露case
介绍一个golang内存泄露case的排查,go的gc、profile等
HashMap内存泄漏场景
根据论坛讨论总结,以下代码会出现内存泄漏 import java.util.HashMap; import java.util.Map; public class HashMapOver { public static void main(String[] args) { Map map = new HashMap();
js闭包函数为什么有内存泄漏的问题存在
能导致内存泄漏的一定是引用类型的变量,比如函数和其他自定义对象。而值类型的变量是不存在内存泄漏的,比如字符串、数字、布尔值等。 因为值类型是靠复制来传递的,而引用类型是靠类似c语言中的指针来传递的。 可以认为一个引用类型的变量就是一个指向某个具体的内存地址的指针。 当我们用js代码创建一个引用类型的时候(以下简称对象),js引擎会在内存中开辟一块空间来存放数据,并把指针引用交给那个变量。
内存泄漏优化---静态变量导致内存泄漏
1、要不怎么说static关键字要慎用呢?来看看下面这段代码,Context对象为静态的,那么Activity就无法正常销毁,会常驻内存。 public class MainActivity extends Activity{ public static Context mContext; @Override protected void onCreate(Bundle savedIn
Java基础恶补——内存泄露、内存溢出
Java基础恶补——内存泄露、内存溢出 (2010-09-15 15:56:26) 转载 标签: 杂谈   要点 内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。  内存泄漏可以分为4