【发布时间】:2010-12-23 01:47:13
【问题描述】:
检查 this 是否为空有意义吗?
假设我有一个带有方法的类;在该方法中,我检查this == NULL,如果是,则返回错误代码。
如果 this 为 null,则表示该对象已被删除。该方法甚至能够返回任何东西吗?
更新:我忘了提到该方法可以从多个线程调用,它可能会导致对象被删除,而另一个线程在该方法中。
【问题讨论】:
-
这并不意味着该对象已被删除。删除指针不会自动将其归零,
((Foo*)0)->foo()是完全有效的语法。只要foo()不是虚函数,它甚至可以在大多数编译器上工作,但它就是 icky。 -
“可能会导致对象被删除,而另一个线程在方法中”。这是不可接受的,您不能删除对象,而其他代码(在同一线程或不同线程中)保留它将使用的引用。它也不会导致
this在其他线程中变为 null。 -
我现在正在研究一种情况,这绝对是 NULL。只有上帝知道为什么。
-
"this" 似乎在父类是抽象类时为空。
-
来自 GCC 6.2 发行说明:值范围传播现在假定 C++ 成员函数的 this 指针不为空。