游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2329|回复: 9

有关堆内存中对象的释放

[复制链接]

29

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2010-7-13 22:29:00 | 显示全部楼层 |阅读模式
通常我们都是这样释放对象的:
A* obj = new A();
delete obj;
不知道能否这样释放
class A
{
  int a;
  public:
    void Release()
    {
       delete this;
    }
};

A* obj = new A();
obj->Release();
我自己试了一下貌似可以,但不知道是否存在不安全因素

3

主题

114

帖子

250

积分

中级会员

Rank: 3Rank: 3

积分
250
发表于 2010-7-14 08:09:00 | 显示全部楼层

Re:有关堆内存中对象的释放

没有问题。

2

主题

683

帖子

687

积分

高级会员

Rank: 4

积分
687
发表于 2010-7-14 08:35:00 | 显示全部楼层

Re:有关堆内存中对象的释放

不是线程安全,算不算问题?

8

主题

148

帖子

148

积分

注册会员

Rank: 2

积分
148
发表于 2010-7-14 10:09:00 | 显示全部楼层

Re:有关堆内存中对象的释放

你考虑过如果某人这样用会有什么后果吗?
function void b()
{
A a
a.Release();
}

7

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2010-7-14 11:17:00 | 显示全部楼层

Re: Re:有关堆内存中对象的释放

你说的问题可以这样解决,把这个类的构造和析构都定义为private,然后提供一个

public:
static  A* newA()
{
    return new A;
}

这样一来就在语法上禁止了建立栈上或者全局的对象,只能将对象建立在堆上。也就避免了你说的情况。

当然,这么写还是不应该鼓励,容易出问题。

I社爱好者: Re:有关堆内存中对象的释放

你考虑过如果某人这样用会有什么后果吗?
function void b()
{
A a
a.Release();
}

29

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2010-7-14 12:58:00 | 显示全部楼层

Re:有关堆内存中对象的释放

谢谢大家讨论了~~

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-7-14 13:04:00 | 显示全部楼层

Re:有关堆内存中对象的释放

这种用法是经常的,通常我会配合引用计数来使用,Release里面根据引用计数释放自己

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-7-14 13:34:00 | 显示全部楼层

Re: Re:有关堆内存中对象的释放

tonykee: Re:有关堆内存中对象的释放

这种用法是经常的,通常我会配合引用计数来使用,Release里面根据引用计数释放自己

用COM吧

8

主题

148

帖子

148

积分

注册会员

Rank: 2

积分
148
发表于 2010-7-15 13:12:00 | 显示全部楼层

Re:有关堆内存中对象的释放

用com不如用.net吧

29

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2010-7-15 21:08:00 | 显示全部楼层

Re:有关堆内存中对象的释放

谢谢大家的讨论,学习了~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 10:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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