【发布时间】:2021-10-03 21:43:55
【问题描述】:
我正在尝试为结构编写移动构造函数,但我不明白为什么我无法调用结构成员的移动构造函数:
#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 是一个右值引用,它是非常量的,所以temp.mVector 应该是非常量并且应该调用unique_ptr 移动构造函数,但是它调用了被删除的复制构造函数。知道错误在哪里吗?
【问题讨论】:
标签: c++ rvalue-reference