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として知られています。次に、そのコピーに割り当てます。からの元の変数は影響を受けません。ポインタを変更する場合は、参照によってポインタを渡す必要があります。cMainMethod

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

これで、cinsideはinfillCと同じポインタを参照します。一方の値を変更すると、もう一方の値に影響します。cMainMethod

または、のパラメータfillCをタイプ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 に答える