ページ 1 / 1
vectorにauto_ptrをpush_backできない
Posted: 2014年2月19日(水) 01:55
by N11
下のコードは、コンパイルに失敗してしまいます。
コード:
auto_ptr<int> pw1(new int(1));
vector<auto_ptr<int>> v;
v.push_back(pw1);
エラーコードは、"error C2558: class 'std::auto_ptr<int>' : コピー コンストラクターが使用できないか、'explicit' として宣言されています。" と表示されます。
しかし、下のコードのコンパイルは成功します。
コード:
void func(const auto_ptr<int> p){}
auto_ptr<int> pw1(new int(1));
func(pw1);
なぜ、push_back()の時は”コピー コンストラクターが使用できない”と表示されるのかを教えて下さい。
Re: vectorにauto_ptrをpush_backできない
Posted: 2014年2月19日(水) 02:43
by tk-xleader
vector::push_backと同じ理由で次のコードはエラーになります。
コード:
#include<memory>
using std::auto_ptr;
void func(const auto_ptr<int>& ptr){
auto_ptr<int>ptr2(ptr);
}
int main(){
auto_ptr<int>ptr(new int);
func(ptr);
}
というのも、auto_ptrのコピーコンストラクタはコピー元を破壊する(所有権を”むしりとる”)ので、引数がconst&ではなく単なる&になっているため、const&なオブジェクトを渡すことができないからです。push_backも内部ではこういうことになっているはずです。
Re: vectorにauto_ptrをpush_backできない
Posted: 2014年2月19日(水) 11:35
by N11
ありがとうございます。
教えていただいたとおり、コピーコンストラクタの引数が非constの参照になっていました。