对于内存动态分配的类,不使用"*"的逻辑

FDu*_*dul 4 c++

所以我正在学习c ++,我刚刚学习了动态分配的内存.有些东西让我觉得很奇怪.

int main()
{
    person* pOne = new person("mike", 35);
    cout << pOne << " " << pOne->getName() << endl;

    person pTwo = { "dave", 30 };
    cout << pTwo.getName() << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为当我们想在pOne中调用getName()函数时,我们应该这样做,*pOne->getName()因为pOne持有内存位置,而不是person对象本身.但如果我这样做,我将有编译器错误.

我这样做pTwo不是动态分配的,它像我一样工作.

那么,有人可以解释在尝试调用函数时不使用"*"的逻辑吗?

Rei*_*ica 11

内置运算符a->b定义为(*a).b,因此取消引用在->运算符内"隐藏" .


Iva*_*nov 6

->只是一个语法糖:a->foo是一样的(*a).foo.所以,当你使用->你实际上解除引用指针.