1

以下情况:

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 仍然是空的。为什么是这样?

4

2 回答 2

2

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

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

现在cinside指向与infillC相同的指针。改变一个值会影响另一个值。cMainMethod

您也可以将参数更改fillC为 type C**,调用它fillC(&c)并分配给它*c = new C()- 但您已经在使用来自其他语言的成语混搭,所以我不推荐这样做。

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

于 2012-11-24T22:46:29.470 回答
0

将 B::fillC 更改为:

class B{
   void fillC(C*& c){
        c = new C();
    }
};
于 2012-11-24T22:46:22.093 回答