以下情况:

class Main{
   void MainMethod(){
      C * c;
      B * b = new B();
      b->fillC(c);
   }
};

class B{
   void fillC(C* c){
      c = new C();
   }
};

class C{
};

在我的软件中,我有这种情况。在程序末尾,对于Main类,c仍然为空。为什么是这样?

最佳答案

指针c被复制到fillC函数中-这称为按值传递。然后,您将其分配给该副本。 c中的原始MainMethod变量不受影响。如果要更改指针,则需要按引用传递指针:

class B{
  void fillC(C*& c){
    c = new C();
  }
};

现在c中的fillC指向与c中的MainMethod相同的指针。更改一个值会影响另一个值。

您可以选择将fillC的参数更改为C**,使用fillC(&c)进行调用,并使用*c = new C()进行分配-但您已经在使用其他语言的成语了,所以我不建议这样做。

不要忘记在某个时候做delete c!

09-08 00:15