12

ここに私が作成したクラスがあります:

class A{  
private:  
    // some private data members:  
    // 2 const integers  
    // 2 integers  
    // 2 const strings  
public:  
    // C'tor  
    // D'tor  
void f(const A&);  
}

このクラスのすべてのオブジェクトの構築では、(明示的な) 動的割り当てはなく、「プリミティブ」型の割り当てのみが行われます。(明示的な動的割り当てがないということは、文字列クラスがメモリを処理する方法以外を意味します)。

私がこれを試すとき:

void f(const A& item){  
    // do some thing  
*this = item;  
    // do other stuff  
}

次のエラーが表示されます:「削除された関数 'A& A::operator=(const A&)' の使用」

これで、コンパイラがデフォルトの代入演算子を提供することになっていることがわかりました。私の質問は、コンパイラがデフォルトの代入演算子を削除された関数と呼ぶのはなぜですか? すべてのデータメンバー関数を手動で割り当てずにこれを修正するにはどうすればよいですか?

どうもありがとう!ギャル

4

1 に答える 1

23

constメンバーがいるからです。それらは代入できないため、コンパイラは代入演算子を提供できません。

于 2013-06-15T14:43:33.167 に答える