std::unique_ptr
为什么我不能使用语义(我认为)返回包含 a 的类std::move
,如下例所示?我认为返回会调用 class 的 move ctor ,A
而. (我使用的是 gcc 11.2,C++20)std::move
std::unique_ptr
例子:
#include <memory>
class A {
public:
explicit A(std::unique_ptr<int> m): m_(std::move(m)) {}
private:
std::unique_ptr<int> m_;
};
A makit(int num) {
auto m = std::make_unique<int>(num);
return std::move(A(m)); // 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>]'x86-64 gcc 11.2 #1
}
int main() {
auto a = makit(42);
return 0;
}
我相信解决方案是返回 a std::unique_ptr
,但在我放弃之前,我想知道为什么 move 方法不起作用。