以下情况:
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
变量 fromMainMethod
不受影响。如果要更改指针,则需要通过引用传递指针:
class B{
void fillC(C*& c){
c = new C();
}
};
现在c
inside指向与infillC
相同的指针。改变一个值会影响另一个值。c
MainMethod
您也可以将参数更改fillC
为 type C**
,调用它fillC(&c)
并分配给它*c = new C()
- 但您已经在使用来自其他语言的成语混搭,所以我不推荐这样做。
不要忘记delete c
在某个时候做!
将 B::fillC 更改为:
class B{
void fillC(C*& c){
c = new C();
}
};