下のコードは、コンパイルに失敗してしまいます。
エラーコードは、"error C2558: class 'std::auto_ptr<int>' : コピー コンストラクターが使用できないか、'explicit' として宣言されています。" と表示されます。
しかし、下のコードのコンパイルは成功します。
なぜ、push_back()の時は”コピー コンストラクターが使用できない”と表示されるのかを教えて下さい。
vectorにauto_ptrをpush_backできない
- tk-xleader
- 記事: 158
- 登録日時: 13年前
- 連絡を取る:
Re: vectorにauto_ptrをpush_backできない
vector::push_backと同じ理由で次のコードはエラーになります。
というのも、auto_ptrのコピーコンストラクタはコピー元を破壊する(所有権を”むしりとる”)ので、引数がconst&ではなく単なる&になっているため、const&なオブジェクトを渡すことができないからです。push_backも内部ではこういうことになっているはずです。
Re: vectorにauto_ptrをpush_backできない
ありがとうございます。
教えていただいたとおり、コピーコンストラクタの引数が非constの参照になっていました。
教えていただいたとおり、コピーコンストラクタの引数が非constの参照になっていました。