gpt4 book ai didi

c++ - 尝试引用已删除函数的唯一指针

转载 作者:行者123 更新时间:2023-11-30 02:40:09 29 4
gpt4 key购买 nike

你好,我正在尝试使用指针并学习 C++ 中唯一指针的基础知识。下面是我的代码,我在 main 函数中注释了代码行。调试问题但是,我无法这样做。我错过了什么?我在 insertNode() 中的 move() 不正确吗?我得到的错误在代码下面:

#include<memory>
#include<iostream>

struct node{
int data;
std::unique_ptr<node> next;
};


void print(std::unique_ptr<node>head){
while (head)
std::cout << head->data<<std::endl;
}


std::unique_ptr<node> insertNode(std::unique_ptr<node>head, int value){
node newNode;
newNode.data = value;
//head is empty
if (!head){
return std::make_unique<node>(newNode);
}
else{
//head points to an existing list
newNode.next = move(head->next);
return std::make_unique<node>(newNode);
}
}



auto main() -> int
{
//std::unique_ptr<node>head;
//for (int i = 1; i < 10; i++){
// //head = insertNode(head, i);
//}
}

错误std::unique_ptr>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)':试图引用已删除的函数

最佳答案

撇开其他小问题不谈,主要问题是这一行:

return std::make_unique<node>(newNode);

您正在尝试构造一个指向新节点的唯一指针,并传递 newNodenode 的复制构造函数.但是,node 的复制构造函数被删除,因为 node包含不可复制的类型(即 std::unique_ptr<node> )。

你应该传递一个 std::move(newNode)相反,但这是有问题的,因为您在堆栈上创建了节点,它将在函数退出时被销毁。

使用 std::unique_ptr我认为这是个坏主意,因为例如要打印列表(或插入列表),您需要 std::move head (所以你失去了它)等等。我认为使用 std::shared_ptr 会更好.

关于c++ - 尝试引用已删除函数的唯一指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29186577/

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