在 C++ 中移动 unique_ptr

moving unique_ptr in c++

我正在设计一个 class,它必须获得 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)’

您正在使用 <unsigned char[]> 模板作为参数,<char[]> 模板作为成员。

它们甚至根本不被编译器认为是相同的 class。如果您打算使用 std::move 之类的模板函数,请使用完全相同的类型。