私は次のようにC++0x unique_ptr
クラスmap
を使用しようとしています:
// compile with `g++ main.cpp -std=gnu++0x`
#include <string.h>
#include <map>
#include <memory>
using namespace std;
struct Foo {
char *str;
Foo(char const *str_): str(strdup(str_)) {}
};
int main(void) {
typedef std::map<int, unique_ptr<Foo>> Bar;
Bar bar;
auto a = bar.insert(Bar::value_type(1, new Foo("one")));
return 0;
}
ただし、GCC では次のエラーが表示されます (短縮されています。これは関連する部分だと思います。独自の C++ コンパイラでテストしてください)。
main.cpp:19: ここからインスタンス化 /usr/include/c++/4.4/bits/unique_ptr.h:214: エラー: 関数 'std::unique_ptr::unique_ptr(const std::unique_ptr&) [with _Tp = Foo, _Tp_Deleter = std::default_delete]' を削除しました /usr/include/c++/4.4/bits/stl_pair.h:68: エラー: ここで使用
何が間違っていたのか本当にわかりません。これはMSVCで動作します。似ているように見える非常によく似た質問を見つけましたが、それらの解決策は私にとってはうまくいきません。
matt@stanley:/media/data/src/c++0x-test$ gcc --version gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3