我正在尝试为一个结构体编写移动构造函数,但我不明白为什么我无法调用结构体成员的移动构造函数:
#include <memory>
struct C
{
std::unique_ptr<int[]> mVector;
size_t mSize;
C() = default;
C(C &&temp)
: mVector(temp.mVector)
, mSize(temp.mSize)
{}
};
当我编译这个代码时,会得到以下错误信息:
gcc -c TempTest.cpp
TempTest.cpp: In constructor 'C::C(C&&)':
TempTest.cpp:9:23: error: use of deleted function 'std::unique_ptr<_Tp [], _Dp>::unique_ptr(const std::unique_ptr<_Tp [], _Dp>&) [with _Tp = int; _Dp = std::default_delete<int []>]'
9 | , mSize(temp.mSize)
| ^
In file included from c:/msys64/mingw64/include/c++/10.3.0/memory:83,
from TempTest.cpp:1:
c:/msys64/mingw64/include/c++/10.3.0/bits/unique_ptr.h:723:7: note: declared here
723 | unique_ptr(const unique_ptr&) = delete;
| ^~~~~~~~~~
因为在构造函数中,
temp
是一个右值引用,它是非 const 的,所以 temp.mVector
应该也是非 const 的,并且应该调用 unique_ptr
的移动构造函数,但实际上它调用了被删除的复制构造函数。请问这里出了什么问题?