以下情况:
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
!