2016-01-13 160 views
3

我正在設計一個類,它必須獲得unique_ptr的所有權,並且使用它。下面是代碼的最小化版本:在C++中移動unique_ptr

Chunk.h:

class Chunk { 
public: 
    Chunk(std::unique_ptr<unsigned char[]> contents); 
    std::unique_ptr<char[]> contents; 
}; 

Chunk.cpp:

Chunk::Chunk(std::unique_ptr<unsigned char[]> content): 
      contents(std::move(content)){ } 

,但它不能,雖然這個錯誤編譯:

no matching function for call to ‘std::unique_ptr<char []>::unique_ptr(std::remove_reference<std::unique_ptr<unsigned char []>&>::type)’ 
+8

你爲什麼使用'''模板作爲參數,''模板作爲成員? – Aracthor

+0

當然,參數應該是對'unique_ptr'或右值引用(&&)的非const引用? –

+1

@Aracthor哦不!這是大約3小時,我檢查它,我沒有注意到這個愚蠢的錯誤! – hamed1soleimani

回答

7

您正在使用<unsigned char[]>模板作爲參數,並將<char[]>模板用作成員。

它們甚至不被編譯器視爲同一類。如果您打算使用模板功能(如std::move),請使用完全相同的類型。