C++:无需实例化对象或使用静态即可访问方法

问题描述 投票:0回答:1
#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 的主体驻留在块的代码部分中,因此可以在整个程序中访问它?

c++ class pointers
1个回答
0
投票

print
之所以有效,是因为它可以已经被制作了
static
。如果它实际上在内部引用了
this
指针所需的任何内容,则会出现段错误。它与内联或您假设的任何其他原因无关。由于您尚未将其标记为语言律师,因此我不会深入解释。简而言之,调用成员函数并不意味着您没有从空
this
指针执行此操作。你可以天真地认为有一个函数
print
是用参数
ptr
调用的,并且由于
ptr
没有取消引用,所以它可以工作。它实际上比这更复杂,但对于这个简单的情况来说,它适用于理解。如果您有虚拟成员,如果您从另一个类继承等等,这将会发生巨大的变化。

© www.soinside.com 2019 - 2024. All rights reserved.