这个C++代码如何工作?未初始化的指针

Ani*_*nge 4 c++

可能重复:
当我在NULL对象指针上调用成员函数时会发生什么?

class A {
  public:
    void foo() { cout << "Work";}
    void bar() { this->foo(); }//new edit, works too!
};

class B {
  private:
    A *a; //never initialized
  public:
    A& getA() {
      return *a;
    }
};

void SomeFunction() {
    B *b = new B();
    B& bRef = *b;
    bRef.getA().bar();//edited
    delete b;
}
Run Code Online (Sandbox Code Playgroud)

我调用SomeFunction()而没有初始化"a",它仍然正确打印"工作".我不明白为什么,它应该有分段故障拯救!

Hen*_*rik 10

这是不确定的行为,但它完全可以在大多数的编译器,如foo不是virtual,它不使用this指针.


Gaz*_*yer 5

记住类只是C++的一个构造.编译时,所有类方法都只是接受隐藏this参数的静态方法.

鉴于您的foo()方法从不引用任何数据成员,它永远不需要使用它,因此尽管没有初始值,但运行正常.