Код: Выделить всё
class Foo {
public:
void fn();
private:
int i;
};
< /code>
и функция поиска < /p>
Foo* findFoo() {
// return nullptr if failed to find
}
< /code>
Мы можем проверить, нашел ли мы Foo, прежде чем вызовать участник < /p>
{
Foo* foo = findFoo();
if (foo) {
foo->fn();
}
}
< /code>
Я думаю, что это оператор «если» является избыточным. Если мы сможем обеспечить поведение по умолчанию для случая Nullptr, это будет более прямым. Итак, я выясняю практику: < /p>
void Foo::fn() {
if (this == nullptr) { return; } // default behavior is to return for nullptr
i; // access to member
}
< /code>
Мы можем использовать его напрямую без проверки nullptr < /p>
{
findFoo()->fn();
}
"избыточный" может привести к недопониманию. Я на самом деле имею в виду «шумный» здесь.
Предположим, что Foo При желании содержит класс Foo_1, Foo1. Необязательно содержит класс foo_2, ... foo_n. < /P>
Если я хочу вызвать участник Функция foo_n из foo, если foo_n содержится рекурсивно в Foo, я должен проверить каждый уровень Foo_x с помощью оператора if . Я думаю, это шумно. Если проверить это в функции члена, это можно назвать как foo-> get_foo_1 ()-> get_foo_2 ()-> ...-> get_foo_n ()-> call ()
Подробнее здесь: https://stackoverflow.com/questions/794 ... d-practice