gpt4 book ai didi

rust - 为什么 std::rc::Rc<> 不是 Copy?

转载 作者:行者123 更新时间:2023-11-29 07:41:22 27 4
gpt4 key购买 nike

谁能给我解释一下为什么Rc<>不是 Copy

我正在编写使用大量共享指针的代码,并且必须输入 .clone()总是让我心烦意乱。

在我看来Rc<>应该只包含一个固定大小的指针,所以类型本身应该是 Sized因此 Copy ,对吧?

我错过了什么吗?

最佳答案

It seems to me that Rc<> should just consist of a pointer, which is a fixed size, so the type itself should be Sized and hence Copy, right?

这并不完全正确。 RcRreference Counted 的缩写。这意味着该类型会跟踪有多少引用指向拥有的数据。这样,一旦引用计数达到 0,我们就可以同时拥有多个所有者并安全地释放数据。


但是我们如何使引用计数器保持有效和最新呢?确切地说,每当创建新的引用/所有者以及删除引用/所有者时,我们都必须做一些事情。具体来说,我们必须在前一种情况下增加计数器,在后者中减少它。

计数器通过执行 Drop 减少,相当于析构函数的 Rust。这drop()只要变量超出范围,就会执行函数 - 非常适合我们的目标。

但是我们什么时候做增量呢?你猜对了:在 clone() 中. The Copy trait ,根据定义,可以通过复制位来复制类型:

Types that can be copied by simply copying bits (i.e. memcpy).

在我们的例子中这不是真的,因为:是的,我们“只是复制位”,但我们还做了额外的工作!我们确实需要增加我们的引用计数器!

关于rust - 为什么 std::rc::Rc<> 不是 Copy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014703/

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