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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!