gpt4 book ai didi

c++ - 是否编译了带有 if(this==NULL) 测试的类函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:14 24 4
gpt4 key购买 nike

我在我们的实验中看到了这段代码片段,它实际上是在 MSVC2008 和 G++ 中编译的。

void LinkList< class T >::Insert(T n)  
{
if (this == NULL)
// some code here
}

据我所知,this 不能为 null,因为如果未实例化,则不能在 C++ 中调用类函数。这是一个有效的代码吗?如果是这样,背后的原因是什么?它可以用在什么地方?

最佳答案

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

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

这样的检查可能应该是一个断言,尽管这样的代码不能保证按照标准实际工作。 (如果 this 为 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++ - 是否编译了带有 if(this==NULL) 测试的类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2558334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com