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

前端之家收集整理的这篇文章主要介绍了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.f2er.com/c/113493.html

猜你在找的C&C++相关文章