где-то в вашем коде есть класс или структура.в отличие от .
оператор ->
используется для доступа к члену структуры или класса, на который указывает указатель.давайте предположим, что наши классы выглядят примерно так:
class Foo
{
public:
void C1(int numbers);
};
class Bar
{
public:
Foo* B1; //pointer to B1 object.
};
давайте также предположим, что где-то в коде у нас был объявлен указатель, и мы пытаемся получить доступ к члену объекта, на который указывает указатель.
Foo* myFoo; //pointer myFoo is declared.
myFoo->C1; //trying to access C1 function what myFoo is pointing at.
в приведенном выше примере мы пытаемся получить доступ к члену myFoo с помощью ->
.Проблема в том, что myFoo ни на что не указывает ... мы только объявили указатель, но не присвоили адрес какого-либо конкретного Foo
объекта.Следовательно, использование оператора ->
для доступа к элементам указателя приведет к неопределенному поведению.Таким образом, для борьбы с этой возможной проблемой, которая может возникнуть в коде, мы можем защитить myFoo проверкой nullptr, прежде чем получить доступ к его члену
Foo* myFoo = nullptr;
, теперь мы можем проверить, является ли myFoo допустимым или нет.
if(myFoo)
myFoo->C1(1); //if its valid call the C1 function.
приведенный выше код получает доступ к члену myFoo, только если myFoo допустим.
Возвращаясь к вашему примеру, теперь мы можем предположить, что происходит.
if(A1->B1) //check if the B1 pointer of the A1 is valid.
A1->B1->C1(3); //if it is valid, call the C1 function of the object B1 pointing to.