游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3584|回复: 11

关于函数内部变量是否需要删除的问题

[复制链接]

15

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2008-6-16 04:23:00 | 显示全部楼层 |阅读模式
rt, 对很多人来说很简单, 但我却有点糊涂了

例如:
struct{} aa, *LPaa;

void aaa( LPaa *ppa1 )
{
aa *paT;
paT = new aa; //
...
*ppa1 = paT;
paT = NULL;

"delete paT;" // 就是这步是否需要, 因为前面 new了
}

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-6-16 08:16:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

数据存储区分为5种其中
什么是“栈”什么是“堆”,搞清楚这两个概念,你就知道该不该释放了。

12

主题

128

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2008-6-16 09:32:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

不需要

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-6-16 12:49:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

晕又不是java,在C++里面,除非是智能指针,

否则
new 一定要 delete
malloc 一定要 free
这是法则

另外
p=NULL;
delete p;
这样有何意义?
反过来
delete p;
p=NULL;
才是标准写法
对象的指针改变了再去释放,可是大忌。

建议先把C++基础学好,不然日后写代码很麻烦

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-6-16 15:23:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

*ppa1 = paT;这句是有问题的,前后类型都不一致。
不知道你要实现什么功能。如果要把paT的值通过参数返回调用者,应该写
*ppa1 = *paT;

void aaa( LPaa *ppa1 )
{
aa *paT;
paT = new aa; //
...
*ppa1 = *paT;
delete paT;
paT = NULL;
}
当然如果是这种情况,那个paT也可以不用指针,直接用栈就得了

12

主题

128

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2008-6-16 16:59:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

要么是我没看清楚
要么是楼上各位没看清楚

我怎么看*ppa1和paT的类型都是一样的.
典型的通过参数返回分配的空间地址

不需要delete的.
delete了就白返回了.

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-6-16 21:52:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

上上层说的对
如果只是在一个块内使用的对象,还是用栈的好,效率高一些

如果同只在同一个块内用堆
new完马上就delete,实在是很浪费,这种开销很不划算

17

主题

737

帖子

743

积分

高级会员

Rank: 4

积分
743
发表于 2008-6-16 22:10:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

同意6楼
看别人的代码一定要理解其意图,不要太教条了。

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-6-17 09:05:00 | 显示全部楼层

Re:关于函数内部变量是否需要删除的问题

看错了,报歉。这个不用delete

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-6-17 13:19:00 | 显示全部楼层

Re: 关于函数内部变量是否需要删除的问题

对对,双指针返回堆,的确不需要删除,真的很不好意思
上面批评的好,我也没看清楚,就忘加评论。

实在是非常,非常的抱歉。

paT = NULL; //这句话可以不用写

delete paT; // 这句一定不能写


[em10]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 05:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表