微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 编译了if(this == NULL)测试的类函数?

我在实验室中看到了这段代码片段,它实际上是在MSVC2008和G中编译的.
void LinkList< class T >::Insert(T n)  
{  
    if (this == NULL)  
    // some code here  
}

据我所知,这不能为null,因为如果没有实例化,你不能在c中调用函数.这是一个有效的代码吗?如果是这样,背后的原因是什么?它有用吗?

解决方法

since you cannot call a class functions in c++ if it wasn’t instantiated

问题是,你可以,但它是leads to undefined behavior.

这样的检查可能应该是一个断言,尽管这些代码不能保证按标准实际工作. (如果这是null,那么您已经处于未定义的行为状态.)

它“有用”的原因是在删除对象后使用对象进行检测,或者从未创建对象:

template <typename T> // I hate this function
void safe_delete(T*& pPtr)
{
    delete pPtr;
    pPtr = 0;
}

T* p = new T;
safe_delete(p);

p->foo(); // this is null,and we've entered undefined behavior

在foo中,你可以断言,“嘿,我们搞砸了:/”.

在我看来,这种用途表明设计不好.你不应该有一个可能再次被调用的指针.你用指针做的最后一件事是删除它;如果它在那之后仍然存在,那么改变你的代码就不行了.

原文地址:https://www.jb51.cc/c/113493.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐