C2280 - 試圖引用一個已刪除的功能是我收到錯誤時,我試圖從initializer_list構造一個std ::地圖>錯誤構建的std ::地圖<T,的unique_ptr <S>>從initializer_list
我做了一個最簡單的代碼(見下文)代表我的問題:
#include <string>
#include <map>
#include <memory>
using namespace std;
int main() {
map<string, unique_ptr<int>> MyMap{
{ "first" ,make_unique<int>(6) },
{ "second",make_unique<int>(22) },
{ "third" ,make_unique<int>(86) }
};
}
所以我知道的unique_ptr無法複製,但由於make_unique將返回右值,應該不是的unique_ptr移動進入初始化器_List? 順便說一句,如果我用shared_ptr替換unique_ptr,那麼問題就解決了,但不是我正在尋找的解決方案,我想保留初始化樣式和unique_ptr。 那麼在這一點上,這個對已刪除函數的有問題的調用正在發生?有一種方法可以在不替換unique_ptr的情況下進行編譯?
不幸的是,它並沒有真正那樣工作。你必須明確地[移動](http://en.cppreference.com/w/cpp/utility/move)指針。 –
我已經將make_unique()包含在move函數中,仍然不會編譯...我做錯了嗎?你能告訴我一個正確方法的例子嗎? –
@Someprogrammerdude:這不是問題。指針正在正確地移入初始化器列表中。但他們沒有被移出初始化列表並進入地圖。我不認爲有這樣做的好方法。 –