游戏开发论坛

 找回密码
 立即注册
搜索
楼主: lmjgood

if (this == NULL) 这样的语句有什么用吗?

[复制链接]

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2006-4-18 12:49:00 | 显示全部楼层

Re: Re:if (this == NULL) 这样的语句有什么用吗?

怪盗基德: Re:if (this == NULL) 这样的语句有什么用吗?

要是this 指针真的空了,那还怎么调用这个对象的成员函数SetAction


说的好,这也是我质疑的。 [em8]

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2006-4-18 13:13:00 | 显示全部楼层

试试这个


  1. #include <stdio.h>
  2. #include <conio.h>

  3. class   strr
  4. {
  5.   public:
  6.         void    doit ()
  7.         {
  8.                 if (this == 0)
  9.                   printf("I'm NULL!\n");
  10.                 else
  11.                   printf("I'm not NULL!\n");
  12.         }
  13. };

  14. void main (void)
  15. {
  16.   strr  *t = 0;

  17.   t->doit();

  18.   getch();
  19. }
复制代码

看来inline的方法不会考虑对象指针(VS2003里)

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-4-18 15:43:00 | 显示全部楼层

Re: Re: Re:if (this == NULL) 这样的语句有什么用吗?

Jeminai: Re: Re:if (this == NULL) 这样的语句有什么用吗?



说的好,这也是我质疑的。 [em8]


可以。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-4-18 15:44:00 | 显示全部楼层

Re:if (this == NULL) 这样的语句有什么用吗?

除非调用虚函数。

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2006-4-19 07:10:00 | 显示全部楼层

Re:if (this == NULL) 这样的语句有什么用吗?

可能想同时作为静态函数和普通类函数来吧,不过这样最好写成两个函数。this==NULL明显就可以写成静态函数嘛。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-4-19 10:21:00 | 显示全部楼层

Re:if (this == NULL) 这样的语句有什么用吗?

如果保证所有对象在delete后都会置NULL
那么还有一点点…点……用处
而且这也是保证都是堆对象
如果是栈上的就go die~

所以,这句就是一废材
如果没有特殊的理由
这样的引擎源码
就丢掉吧
用低格

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2006-4-19 11:34:00 | 显示全部楼层

Re:if (this == NULL) 这样的语句有什么用吗?

类的函数不跟随类的实例,每个类成员函数在内存中只有一份.
THIS其实就是指向调用类函数的类实例的内存.这样写是防止对该类的NULL指针调用次函数产生异常.

总的来说,个引擎太照顾人了,而且把错误隐藏起来了.

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2006-4-19 13:25:00 | 显示全部楼层

Re:if (this == NULL) 这样的语句有什么用吗?

能否贴全一点,也许有我们暂时想不到的用处,我想这种代码也是发现问题后才改成这种样子的,会不会这个引擎里面大量用了智能指针,引用计数。

1

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2006-4-19 22:16:00 | 显示全部楼层

Re:if (this == NULL) 这样的语句有什么用吗?

对的,贴个整段出来看看,说不定该代码的作者是在解决一个绝妙的问题.

希望楼主对 该代码所包含的类,以及类实现的功能做一个介绍.

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2006-4-19 22:53:00 | 显示全部楼层

Re:if (this == NULL) 这样的语句有什么用吗?

如果不存在,如何调用它自身?逻辑错误。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 14:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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