无法使用初始化列表构建向量<std::unique<...>>
Unable to construct a vector<std::unique<...>> using an initialiser list
我正在尝试使用初始化列表来初始化 unique_ptr 的向量,但由于编译器错误而失败。这看起来很奇怪,因为它看起来与我见过的许多示例相似。
std::vector<std::unique_ptr<std::string>> v{
std::unique_ptr<std::string>{new std::string{"foo"}}
};
因编译器错误而失败。
.../memory:1645:31: error: call to implicitly-deleted copy constructor of 'std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > >'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
...
...47: note: in instantiation of member function 'std::__1::vector<std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > >, std::__1::allocator<std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > > > >::vector' requested here
std::vector<std::unique_ptr<std::string>> v{
^
std::unique_ptr has no copy constructor. You create an instance and then ask the std::vector 在初始化期间复制该实例。
error: call to implicitly-deleted copy constructor of 'std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > >'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
The class satisfies the requirements of MoveConstructible and
MoveAssignable, but not the requirements of either CopyConstructible
or CopyAssignable.
以下适用于新的 emplace 调用。但是无法使用初始化列表。
std::vector< std::unique_ptr< std::string > > v;
v.emplace_back( new std::string{ "foo" } );
请参阅 using unique_ptr with standard library containers 进一步阅读。
我正在尝试使用初始化列表来初始化 unique_ptr 的向量,但由于编译器错误而失败。这看起来很奇怪,因为它看起来与我见过的许多示例相似。
std::vector<std::unique_ptr<std::string>> v{
std::unique_ptr<std::string>{new std::string{"foo"}}
};
因编译器错误而失败。
.../memory:1645:31: error: call to implicitly-deleted copy constructor of 'std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > >'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
...
...47: note: in instantiation of member function 'std::__1::vector<std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > >, std::__1::allocator<std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > > > >::vector' requested here
std::vector<std::unique_ptr<std::string>> v{
^
std::unique_ptr has no copy constructor. You create an instance and then ask the std::vector 在初始化期间复制该实例。
error: call to implicitly-deleted copy constructor of 'std::__1::unique_ptr<std::__1::basic_string<char>, std::__1::default_delete<std::__1::basic_string<char> > >'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
The class satisfies the requirements of MoveConstructible and MoveAssignable, but not the requirements of either CopyConstructible or CopyAssignable.
以下适用于新的 emplace 调用。但是无法使用初始化列表。
std::vector< std::unique_ptr< std::string > > v;
v.emplace_back( new std::string{ "foo" } );
请参阅 using unique_ptr with standard library containers 进一步阅读。