社区
C++ 语言
帖子详情
在try{}里new 出来的变量,如果不delete的话,会内存泄露马?
darkone
2007-05-22 03:27:32
如下
try
{
Sap_var sap = new Sap;
//此处的sap需要delete吗?
}
catch(...)
{
printf("test");
}
...全文
298
8
打赏
收藏
在try{}里new 出来的变量,如果不delete的话,会内存泄露马?
如下 try { Sap_var sap = new Sap; //此处的sap需要delete吗? } catch(...) { printf("test"); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yoyo_alex_lw
2007-05-22
打赏
举报
回复
每一个new就要对应一个delete
taodm
2007-05-22
打赏
举报
回复
变量作用域问题。
try{}外面怎么可能看到try{}里面定义的局部变量嘛。
darkone
2007-05-22
打赏
举报
回复
但为什么在try{}外面delete sap会失败?
taodm
2007-05-22
打赏
举报
回复
每一个new就要对应一个delete
jianshi051
2007-05-22
打赏
举报
回复
似乎是动态内存分配里面遇到了异常都会不释放资源,造成所谓的内存泄露。
总之如果构造函数没有得到正常的完成的话,其析构函数也将得不到调用,并且后面的一系列的对象也将不能继续构造函数。
这里有一个例子,演示了当构造函数没有正常结束时不会调用相关联的析构函数。这个例子还显示了当在创建对象数组的过程中抛出异常时会发生什么情况:
#include<iostream>
using namespace std;
class Trace
{
static int counter;
int objid;
public:
Trace()
{
objid = counter ++;
cout<<"Constructing # "<<objid<<endl;
if(objid==3)
throw 3;
}
~Trace()
{
cout<<"Destructing # "<<objid<<endl;
}
};
int Trace::counter = 0;
int main()
{
try
{
Trace n1; //没有异常,完成构造
Trace array[5]; //第0,1号元素得到完全构造,但是之后的元素由于第2号元素构造失败,所以退出构造,第3,4号元素没有构造和析构。
Trace n2; //和上一句一样,由于抛出了异常,所以得不到构造,更加得不到析构。
}
catch(int i)
{
cout<<"caught "<<i<<endl;
}
return 0;
}
程序的输出结果为:
Constructing # 0
Constructing # 1
Constructing # 2
Constructing # 3
Destructing # 2
Destructing # 1
Destructing # 0
caught 3
或者可以用auto_ptr:
auto_ptr类模板是在头文件<memory>中定义的,它的构造函数接受一个指向类型属性的指针作为参数,它是一个用于封装指向分配的堆内存的指针。
珍惜生命远离CPP
2007-05-22
打赏
举报
回复
那在里new出来的都需要delete
WizardK
2007-05-22
打赏
举报
回复
new和delete必须匹配
mx19841031
2007-05-22
打赏
举报
回复
需要,不然内存泄漏
vld(Visual Leak Detector
内存泄露
检测工具 源码)
内存泄漏如果不是很严重,在短时间内对程序不
会
有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,从性能下降到内存耗尽,甚至
会
...
【
内存泄露
】
对于C++来说,内存泄漏就是
new
出来的对象没有
delete
; 对于Java来说,就是
new
出来的Object 放在Heap上无法被GC回收; 本文通过QQ和Qzone中内存泄漏实例来讲android中内存泄漏分析解法和编写代码应注意的事项。 [2] ...
oeasy教您玩转python入门教程
在开始学习Python之前,建议您先熟悉基本的计算机科学概念,例如
变量
、数据类型、运算符等。 2. 数据类型 Python具有多种数据类型,包括数字(整数和浮点数)、字符串、布尔值、列表、元组、集合和字典等。这些数据...
C/C++ 内存管理
new
delete
operator
new
与operator
delete
函数 内存泄漏
对于
new
和
delete
我们上述也说过了,
new
是先调用 operator
new
函数,来开辟空间,然后调用这
里
类型的构造函数;而
delete
是先调用西沟函数,然后再 调用 operator
delete
释放空间。
new
[] 是调用operator
new
...
c++中
new
对象,如果不调用
delete
对象,该对象不
会
自动调用析构函数;
delete
对象才
会
自动调用类的析构函数(清空对象内部在堆区开辟的成员
变量
),同时可以清空在堆区创建对象时开辟的空间
new
是C++中用于动态内存分配的运算符,在C语言中一般使用malloc函数。 (1)plain
new
顾名思义就是普通的
new
,就是我们惯常使用的
new
。分配内存,调用构造函数,在C++中是这样定义的: 1 voi...
C++ 语言
64,681
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章