gpt4 book ai didi

c++ - 制作一个 const unique_ptr 然后尝试从它 std::move 给出相同的错误,就好像您试图访问复制构造函数一样

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:06 27 4
gpt4 key购买 nike

当我们尝试复制 unique_ptr(例如,将一个唯一指针分配给另一个)时,我注意到错误是

Error C2280 std::unique_ptr<int,std::default_delete attempting to reference a deleted function ptrTest c:\ptrtest\main.cpp 7
#include <memory>

int main()
{
std::unique_ptr<int> a = std::make_unique<int>(2);
std::unique_ptr<int> b = a;
}

没关系,因为 unique_ptr 没有定义复制构造函数。您不会从唯一指针进行复制以在它们之间 move (转移指针的所有权)。

有趣的是(好吧,也许不是),这段代码抛出了同样的错误。现在我知道它是无效的(我将第一个 unique_ptr 声明为不可变对象(immutable对象)),但错误消息暗示它正在尝试调用复制构造函数。那是对的吗?

#include <memory>

int main()
{
const std::unique_ptr<int> a = std::make_unique<int>(2);
std::unique_ptr<int> b = std::move(a);
}

最佳答案

是的。

查找期间唯一可能可行的调用候选者是复制构造函数,因为编译器试图执行复制初始化......然后它发现这是不可能的,因为所述构造函数已被删除。这是一个多步骤过程。

您可以将其称为 C++ 怪癖,也许,因为诊断有点抽象泄漏。但从技术角度来看,这确实有意义。

关于c++ - 制作一个 const unique_ptr 然后尝试从它 std::move 给出相同的错误,就好像您试图访问复制构造函数一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41947020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com