在 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
之类的模板函数,请使用完全相同的类型。
我正在设计一个 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
之类的模板函数,请使用完全相同的类型。