我在想這個。考慮這個:您是否可以使用初始化程序列表中的unique_ptr初始化STL容器?
#include <iostream>
#include <map>
#include <memory>
int main() {
std::map< int, std::unique_ptr<int> > m =
{ { 1, std::unique_ptr<int>(new int(3)) } };
return(0);
}
這是C++ 11。它無法與GCC錯誤消息的長令來編譯,其中包括一個
/usr/include/c++/4.9/ext/new_allocator.h:120:4: error: use of deleted function ‘constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const int; _T2 = std::unique_ptr<int>]’ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
是否有可能在所有做什麼,我想在這裏做什麼?我注意到,使用shared_ptr,它工作正常。是否有可能與unique_ptr做到這一點?如果是這樣,我錯過了什麼?如果不是,爲什麼不呢?
啊,謝謝。我懷疑像這樣的事情 - 「constexpr」似乎是一個線索。 –
@ mike4ty4真正的線索,證明Marshall說的是'使用刪除函數對(const std :: pair <_T1, _T2>&)[with _T1 = const int; _T2 = std :: unique_ptr]'。也就是說:這是因爲它是一個拷貝構造函數,它會嘗試複製這兩個元素,但是當然,'std :: unique_ptr'是不可複製的。如果你設法調用它,移動構造函數會給你同樣的錯誤 –