c – 编译了if(this == NULL)测试的类函数?
发布时间:2020-12-16 05:52:14 所属栏目:百科 来源:网络整理
导读:我在实验室中看到了这段代码片段,它实际上是在MSVC2008和G中编译的. void LinkList class T ::Insert(T n) { if (this == NULL) // some code here } 据我所知,这不能为null,因为如果没有实例化,你不能在c中调用类函数.这是一个有效的代码吗?如果是这样,背
我在实验室中看到了这段代码片段,它实际上是在MSVC2008和G中编译的.
void LinkList< class T >::Insert(T n) { if (this == NULL) // some code here } 据我所知,这不能为null,因为如果没有实例化,你不能在c中调用类函数.这是一个有效的代码吗?如果是这样,背后的原因是什么?它有用吗? 解决方法
问题是,你可以,但它是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中,你可以断言,“嘿,我们搞砸了:/”. 在我看来,这种用途表明设计不好.你不应该有一个可能再次被调用的指针.你用指针做的最后一件事是删除它;如果它在那之后仍然存在,那么改变你的代码就不行了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |