Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linked list “的惯用寿命是多少?”;“下一步”;链接列表中的指针?_Linked List_Rust - Fatal编程技术网

Linked list “的惯用寿命是多少?”;“下一步”;链接列表中的指针?

Linked list “的惯用寿命是多少?”;“下一步”;链接列表中的指针?,linked-list,rust,Linked List,Rust,我试图创建一个简单的链表类型的类,其中有一个指向下一个节点的指针,但遇到了一些问题。正确的方法是什么 我目前拥有的是: 特征库{ fn连接(&'a自我,下一个:&'b基地); } struct MyStruct,//这应该与对下一个节点的Base的引用交换 } MyStruct的impl Base你说的 我有一个指向下一个节点的指针 您的代码显示的是引用,而不是指针,所以我认为您指的是引用。但是你也说 当我取消分配列表时,它应该完全这样做 这两个概念是不相容的。唯一可以丢弃物品的东西是拥有该物品

我试图创建一个简单的链表类型的类,其中有一个指向下一个节点的指针,但遇到了一些问题。正确的方法是什么

我目前拥有的是:

特征库{
fn连接(&'a自我,下一个:&'b基地);
}
struct MyStruct,//这应该与对下一个节点的Base的引用交换
}
MyStruct的impl Base你说的

我有一个指向下一个节点的指针

您的代码显示的是引用,而不是指针,所以我认为您指的是引用。但是你也说

当我取消分配列表时,它应该完全这样做

这两个概念是不相容的。唯一可以丢弃物品的东西是拥有该物品的东西。这是通过放弃所有权而不是取得所有权来实现的。有了参考,你就不拥有任何东西,你只是在借用它

现在,您可以拥有指向下一项的自有指针。这是一个
,表示堆分配的项。那么就没有生命需要发挥作用了,并且被覆盖了

这种类型的列表是通用的,因此您可以存储一个拥有的项目,如
字符串
,或对
&u32
的引用。当列表或列表节点被删除时,
字符串
也将被删除。从技术上讲,引用会被删除,但删除引用不会删除引用的项

正在创建仅引用下一个节点的链接列表。。。至少可以说,这很棘手,而且可能没有什么用处

您的
节点
如下所示:

struct Node<'a> {
    next: Option<&'a mut Node<'a>>,
}
struct Node你说

我有一个指向下一个节点的指针

您的代码显示的是引用,而不是指针,所以我认为您指的是引用。但是你也说

当我取消分配列表时,它应该完全这样做

这两个概念是不相容的。唯一可以丢弃物品的东西是拥有该物品的东西。这是通过放弃所有权而不是取得所有权来实现的。有了参考,你就不拥有任何东西,你只是在借用它

现在,您可以拥有指向下一项的自有指针。这是一个
,表示堆分配的项。那么就没有生命需要发挥作用了,并且被覆盖了

这种类型的列表是通用的,因此您可以存储一个拥有的项目,如
字符串
,或对
&u32
的引用。当列表或列表节点被删除时,
字符串
也将被删除。从技术上讲,引用会被删除,但删除引用不会删除引用的项

正在创建仅引用下一个节点的链接列表。。。至少可以说,这很棘手,而且可能没有什么用处

您的
节点
如下所示:

struct Node<'a> {
    next: Option<&'a mut Node<'a>>,
}

struct Node如果你有一个循环列表,这可能会很疯狂,对吗?为什么不将这个问题标记为、或的副本?-#1:~不再是有效的rust运算符,它们在节点内使用列表后端。我想实现节点遍历-#2:正在复制节点,而不是设置引用-#3:~不再是有效的rust运算符。无效。实现这一点是最好的方法吗?#4:同样,在调用中构造值#5:没有关于添加的内容。它只引用到下一个操作符#6:是关于扩展泛型特征的,与多个生命周期无关我的问题不同在于:添加的对象不是在connect/add调用中构造的。他们有自己的生命周期。您的代码意图不清楚<代码>图层
未定义,并且您有许多打字错误。你能举一个可复制的例子吗?就我个人而言,我有一些关于这方面的设计想法,但我相信你想要创造的最终是不可能的,尽管我无法证明这一点。基本上你是在以不兼容的方式摆弄你的一生。下面是一个设计示例:如果您有一个循环列表,这可能会变得疯狂,对吗?为什么不将此问题标记为、或的副本?-#1:~不再是有效的rust运算符,它们在节点内使用列表后端。我想实现节点遍历-#2:正在复制节点,而不是设置引用-#3:~不再是有效的rust运算符。无效。实现这一点是最好的方法吗?#4:同样,在调用中构造值#5:没有关于添加的内容。它只引用到下一个操作符#6:是关于扩展泛型特征的,与多个生命周期无关我的问题不同在于:添加的对象不是在connect/add调用中构造的。他们有自己的生命周期。您的代码意图不清楚<代码>图层
未定义,并且您有许多打字错误。你能举一个可复制的例子吗?就我个人而言,我有一些关于这方面的设计想法,但我相信你想要创造的最终是不可能的,尽管我无法证明这一点。基本上你是在以不兼容的方式摆弄你的一生。下面是一个设计示例:您能解释一下指针和引用之间的区别吗?我来自托管语言,在我的头脑中,我一直认为引用是指针。指针只是一个包含内存地址的整数。引用还保证了内存位置上对象的有效性和类型。@w.brian:当你说“指针”时,并不清楚你的意思。在Rust中,我们只需调用
&T
引用和
*T
原始指针。在机器层面上,它们非常相似。但是语言对待他们的方式不同。例如,引用始终有效,表示“借用”。原始指针可以为null,并且不表示任何所有权/借用。它们主要用于实现highe