We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
一般来说,析构函数的调用顺序与变量的声明顺序相反。也就是说,如果存在明确的声 明顺序, 则编译器可以推断析构函数的调用顺序。但是对于同时声明的情况,比如声明一个 元组时 ,其 内 部元素的 生命周期是相同的 , 编译器无法推断到底该先调用谁的析构函数。当 出现这种情况的时候,就容易产生悬垂指针。
经过的我测试,代码清单 13-23 是可以正常运行的。
把 let (x,y); 修改为 let (y,x);,即调换下元组中 x, y 的顺序,代码清单 13-23 就无法通过编译。
let (x,y);
let (y,x);
这说明元组的析构顺序是确定的。可能是在较新的版本中,Rust 解决了析构顺序问题。
那么,还有哪些类型的析构顺序不确定呢?
rustc -V rustc 1.43.1 (8d69840ab 2020-05-04)
The text was updated successfully, but these errors were encountered:
第 497 页代码清单 13-26 也可以正常运行,不会因为析构顺序报错。 第 499~500 页代码清单 13-29,也不会因为在 drop 中读取 T 的内容而引起析构顺序改变;代码 19 行会因为 x2 的生命周期太短而报错,无法通过编译。
Sorry, something went wrong.
@zydxhs 感谢反馈。估计是rustc升级修改过了
No branches or pull requests
页码与行数
析构顺序的描述不正确
经过的我测试,代码清单 13-23 是可以正常运行的。
把
let (x,y);
修改为let (y,x);
,即调换下元组中 x, y 的顺序,代码清单 13-23 就无法通过编译。这说明元组的析构顺序是确定的。可能是在较新的版本中,Rust 解决了析构顺序问题。
那么,还有哪些类型的析构顺序不确定呢?
The text was updated successfully, but these errors were encountered: