社区
Delphi
帖子详情
为什么下面这样写不安全?
churchatp1
2005-08-17 05:41:15
SomeClass1 := TSomeClass.Create;
SomeClass2 := TSomeClass.Create;
try
{ do some code }
finally
SomeClass1.Free;
SomeClass2.Free;
end;
...全文
166
18
打赏
收藏
为什么下面这样写不安全?
SomeClass1 := TSomeClass.Create; SomeClass2 := TSomeClass.Create; try { do some code } finally SomeClass1.Free; SomeClass2.Free; end;
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuanscar
2005-08-18
打赏
举报
回复
呵呵,作了各种测试,finally里面的free出现异常的情况只有一种,就是在执行finally的free时候SomeClass1已经被free了。谁写程序会那么写?趁早该行吧!
yuanscar
2005-08-18
打赏
举报
回复
zzlingaaa(小舟):看看finally的帮助再说,finally是遇到异常后执行的。怎么会中断
fuzhong
2005-08-18
打赏
举报
回复
赞成 zzlingaaa(小舟) hqhhh(枫叶)
hellolongbin
2005-08-18
打赏
举报
回复
如果非要说有问题的话,我建议把SomeClass2和SomeClass1的释放顺序颠倒一下,如果你的程序中SomeClass1和SomeClass2 有关系的话
wasi
2005-08-18
打赏
举报
回复
SomeClass1 := TSomeClass.Create;
try
{ do some code }
try
SomeClass2 := TSomeClass.Create;
finally
if assigned(SomeClass2) then
SomeClass2.Free;
end;
finally
SomeClass1.Free;
end;
lw549
2005-08-18
打赏
举报
回复
//写一个例子,有兴趣的看一下
type
TTest = class
constructor Create;
destructor Destroy;override;
public
procedure Test1;
end;
constructor TTest.Create;
begin
inherited;
raise Exception.Create('Create');
end;
destructor TTest.Destroy;
begin
raise Exception.Create('Destroy');
inherited;
end;
procedure TTest.Test1;
begin
raise Exception.Create('Test1');
end;
///////////////////////////////////
//测试
var
T: TTest;
begin
TTest.Create;//这里将调用Destroy,后面的都没有执行
try
T.Test1;
finally
T.Free;
end;
end;
lw549
2005-08-18
打赏
举报
回复
SomeClass1 := TSomeClass.Create;
try
{ do some code }
try
SomeClass2 := TSomeClass.Create;//如果构造函数抛出异常,将调用析构函数,这样做还是不安全
finally
SomeClass2.Free;
end;
finally
SomeClass1.Free;
end;
lw549
2005-08-18
打赏
举报
回复
如果需要创建10个class,岂不是要嵌套10层try?搞笑
cncharles
2005-08-18
打赏
举报
回复
hqhhh(枫叶) 比较标准
ghy412
2005-08-18
打赏
举报
回复
支持hqhhh(枫叶),不论在什么情况下都能释放SomeClass1和SomeClass2。
hthunter
2005-08-18
打赏
举报
回复
一般情况下楼主那样的写法就没问题的了,但是如果是自定义的类、create和free方法重载或者重写过的话,如果考虑到create或者free方法也有可能出现异常,最好能做相应的控制
winxkm
2005-08-17
打赏
举报
回复
建议你把你的实例代码贴出来
winxkm
2005-08-17
打赏
举报
回复
呵呵!没有找出病因·
hqhhh
2005-08-17
打赏
举报
回复
标准应该是下面这样:
SomeClass1 := TSomeClass.Create;
try
{ do some code }
try
SomeClass2 := TSomeClass.Create;
finally
SomeClass2.Free;
end;
finally
SomeClass1.Free;
end;
boatzm
2005-08-17
打赏
举报
回复
安全
zzlingaaa
2005-08-17
打赏
举报
回复
SomeClass1创建成功以后,SomeClass2的创建出现异常,就会导致SomeClass1没有释放就退出过程...一家之言...
Monkeycn
2005-08-17
打赏
举报
回复
当然完全了,这是delphi帮助里面推荐使用的方法啊
hanlin2004
2005-08-17
打赏
举报
回复
怎么不安全了?
等保2.0详解之通用&云物大工移
安全
课程培训
第二部分讲解为什么要做等保、有什么目地和意义?结合《中国人民共和国网络
安全
法》的执法案例介绍说明等保2.0建设的重要性。 第三部分介绍我国等保的发展历史、等保1.0和2.0从被动防御到主动防御的区别、等保2.0...
为什么HashMap线程不
安全
?以及实现HashMap线程
安全
的解决方案
一、为什么HashMap线程不
安全
? 1、JDK1.7 扩容引发的死循环和数据丢失 (1).当前jdk1.7版本的HashMap线程不
安全
主要是发生在扩容函数中,其中调用了HshMap的transfer()方法 //jdk 1.7的transfer方法,HashMap的扩...
HashMap为什么线程不
安全
?
1、HashMap线程不
安全
原因: 原因: JDK1.7 中,由于多线程对HashMap进行扩容,调用了HashMap#transfer(),具体原因:某个线程执行过程中,被挂起,其他线程已经完成数据迁移,等CPU资源释放后被挂起的线程重新...
为什么会有多线程?什么是线程
安全
?如何保证线程
安全
?(带详细例子)
1. 为什么会有多线程? 2. 什么是线程
安全
?3. 怎么样保证线程
安全
?
java中为什么Hashtable是线程
安全
的,而HashMap是线程不
安全
的?还有ArrayList为什么是线程不
安全
的,Vector是线程
安全
的??
什么叫做线程
安全
HashMap Hashtable Collections.synchronizedMap()
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章