次の状況:
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
insideはinfillC
と同じポインタを参照します。一方の値を変更すると、もう一方の値に影響します。c
MainMethod
または、のパラメータfillC
をタイプC**
に変更し、それを呼び出して、fillC(&c)
で割り当てること*c = new C()
もできますが、すでに他の言語のイディオムのミッシュマッシュを使用しているため、これはお勧めしません。
いつかすることを忘れないdelete c
でください!
B::fillCを次のように変更します。
class B{
void fillC(C*& c){
c = new C();
}
};