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中,你可以断言,“嘿,我们搞砸了:/”.

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...