#include <iostream>
class Foo
{
private:
int* ptr;
public:
Foo()
{
ptr = new int;
}
void print()
{
std::cout << "Hello World\n";
}
};
int main()
{
Foo* ptr{ nullptr };
ptr->print();
}
为什么可以打印?
Print 不是静态方法,因此它不依赖于类,而是依赖于对象。是因为编译器使其内联,还是因为 print 的主体驻留在块的代码部分中,因此可以在整个程序中访问它?
print
之所以有效,是因为它可以已经被制作了static
。如果它实际上在内部引用了 this
指针所需的任何内容,则会出现段错误。它与内联或您假设的任何其他原因无关。由于您尚未将其标记为语言律师,因此我不会深入解释。简而言之,调用成员函数并不意味着您没有从空 this
指针执行此操作。你可以天真地认为有一个函数 print
是用参数 ptr
调用的,并且由于 ptr
没有取消引用,所以它可以工作。它实际上比这更复杂,但对于这个简单的情况来说,它适用于理解。如果您有虚拟成员,如果您从另一个类继承等等,这将会发生巨大的变化。