1. ホーム
  2. c++

[解決済み] 代入演算子とコピーコンストラクタの違いは何ですか?

2022-05-12 10:14:59

質問

C++の代入コンストラクタとコピーコンストラクタの違いがよくわかりません。以下のような感じです。

class A {
public:
    A() {
        cout << "A::A()" << endl;
    }
};

// The copy constructor
A a = b;

// The assignment constructor
A c;
c = a;

// Is it right?

代入コンストラクタ、コピーコンストラクタのメモリ確保方法を知りたいのですが。

どのように解決するのですか?

A コピーコンストラクタ を初期化するために使用されます。 を初期化するために使用されます。 オブジェクトを他のオブジェクトのデータから取得します。

A(const A& rhs) : data_(rhs.data_) {}

例えば

A aa;
A a = aa;  //copy constructor

代入演算子 のデータを置き換えるために使用されます。 のデータを置き換えるために使用されます。 オブジェクトを他のオブジェクトのデータで初期化します。

A& operator=(const A& rhs) {data_ = rhs.data_; return *this;}

例えば

A aa;
A a;
a = aa;  // assignment operator

コピー構文をデフォルト構文+代入で置き換えることも可能ですが、その場合は効率が悪くなります。

(余談ですが、上記の私の実装はまさにコンパイラが無償で付与してくれるものなので、手動で実装してもあまり意味はないでしょう。もし、この2つのうち1つでもあれば、何らかのリソースを手動で管理している可能性があります。その場合、あたり 3 のルール のように、他の1つとデストラクタも必要になる可能性が非常に高いです)。