Top > C++ > コピーコンストラクタと代入演算子

コピーコンストラクタがどういうものか、やっと判明したのでメモ。

#code(c,){{
class A
{
public:
  A();
  int x;
}

void func()
{
  A a;
  A b = a;
  /*
  b.x = a.x; が行われる。
  */
}

}}

宣言しなくても、コピーコンストラクタは自動で作成され、
メンバ変数に対して、=演算子が用いられて代入されるんだそうです。
自動で作成されるってところが恐いところで、
メンバにnewしたポインタをもつようなクラスの場合、
コピーコンストラクタを明示的に定義するか、
コピーコンストラクタの宣言のみするかして、対策しないといけないのです。


次の例を見てみる。
#code(c,){{
#include <cstdio>
using namespace std;

class Test
{
public:
  Test(float val):x(val)
  {
    printf( "Constructor\n" );
  }

  ~Test()
  {
    printf( "Destructor\n" );
  }

  float x;
};
  
int main()
{
  Test a(3);
  Test b(4);
  printf( "%f\n" , b.x );
  b = a;
  printf( "%f\n" , b.x );

  return 0;
}

}}

出力結果:
 Constructor
 Constructor
 4.000000
 3.000000
 Destructor
 Destructor

b=aでは,デストラクタは呼ばれない。
なので,メンバ変数にnewしたものを持っていたら・・・ですね;


    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS