0

代入演算子とコピー コンストラクターの使用をテストするコードを書いています。コードは次のとおりです。

#include <iostream>
#include <algorithm>
using namespace std;

class fun {
  int i;
  public:
         fun():i(1) {i=1;cout<<"in: cons\n";}
         ~fun() {cout<<"in: des\n";}
         fun& operator=(fun b) {
              cout<<"in: assignOp\n";
              swap(this->i, b.i);
              return *this;
         }
         fun(fun& b) {
              cout<<"in: copy cons\n";
              b.i = this->i;
         }
         void print() {
              cout<<i<<endl;
         }
};

main() 
{
   fun A;
   fun B;
   B = A;
   A.print();
}

コードの出力は次のとおりです。

in: 短所

in: 短所

in: 短所をコピー

in: assignOp

in: デス

-1216991244

in: デス

in: デス

ここで、出力について理解できないことが 2 つあります。

まず、なぜコードがコピー コンストラクター関数に入るのでしょうか。次に、「i」の値が「1」ではなくガベージとして出力されるのはなぜですか?

私は初心者なので、疑いが明らかな場合はご容赦ください。

4

2 に答える 2

2
B = A;

これにより、代入演算子が呼び出されます。出力に表示copy consされる理由は、代入演算子が引数を値で受け取るためです。したがってA、代入演算子関数にコピーされます。これには、コピー コンストラクターを使用する必要があります。

コピー コンストラクターとコピー代入演算子はどちらも、通常、const参照によって引数を取ります。

ガベージ値を取得する理由は、次の行が逆になっているためです。

b.i = this->i;

そのはず:

this->i = b.i;

それ以外の場合、コピー コンストラクターは の不確定値をコピー元this->iのオブジェクトにコピーします。

于 2013-05-04T16:05:06.070 に答える