在C++成员函数中校验this指针是否为合理实践?
空指针调用成员函数的实践是否存在弊端?
场景说明
假设有如下C++类定义:
class Foo { public: void fn(); private: int i; };
以及查找函数:
Foo* findFoo() { // 查找失败时返回nullptr }
常规实现方式
调用成员函数前需要先判断指针是否为空:
{ Foo* foo = findFoo(); if (foo) { foo->fn(); } }
我的简化方案
我觉得这类判空语句过于繁琐,希望为空指针情况提供默认行为来简化代码。于是想到在成员函数内部校验this指针:
void Foo::fn() { if (this == nullptr) { return; } // 空指针时默认直接返回 i; // 访问类成员变量 }
这样就可以直接调用,无需在外层做判空:
{ findFoo()->fn(); }
疑问
将this与nullptr比较并非this指针的常规用法,我想了解这种做法是否存在副作用或弊端。
补充说明:我所说的“繁琐”是指多层嵌套场景,比如Foo可能包含Foo_1,Foo_1可能包含Foo_2……Foo_n。如果要从Foo调用Foo_n的成员函数,需要逐层判空,非常繁琐。而在成员函数中校验this指针的话,就可以直接写成foo->get_foo_1()->get_foo_2()->...->get_foo_n()->call()。
内容的提问来源于stack exchange,提问作者hczstev
相关产品推荐
相关产品推荐

