Skip to content
New issue

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.2.4节 元组析构顺序是确定的 第1版 第4次印刷 #294

Open
zydxhs opened this issue May 12, 2020 · 2 comments
Open

第13.2.4节 元组析构顺序是确定的 第1版 第4次印刷 #294

zydxhs opened this issue May 12, 2020 · 2 comments
Labels
第十三章 第十三章
Milestone

Comments

@zydxhs
Copy link

zydxhs commented May 12, 2020

页码与行数

  • 第495页
  • 倒数第4行

析构顺序的描述不正确

一般来说,析构函数的调用顺序与变量的声明顺序相反。也就是说,如果存在明确的声
明顺序, 则编译器可以推断析构函数的调用顺序。但是对于同时声明的情况,比如声明一个
元组时 ,其 内 部元素的 生命周期是相同的 , 编译器无法推断到底该先调用谁的析构函数。当
出现这种情况的时候,就容易产生悬垂指针。

经过的我测试,代码清单 13-23 是可以正常运行的。

let (x,y); 修改为 let (y,x);,即调换下元组中 x, y 的顺序,代码清单 13-23 就无法通过编译。

这说明元组的析构顺序是确定的。可能是在较新的版本中,Rust 解决了析构顺序问题。

那么,还有哪些类型的析构顺序不确定呢?

rustc -V
rustc 1.43.1 (8d69840ab 2020-05-04)
@zydxhs
Copy link
Author

zydxhs commented May 13, 2020

第 497 页代码清单 13-26 也可以正常运行,不会因为析构顺序报错。
第 499~500 页代码清单 13-29,也不会因为在 drop 中读取 T 的内容而引起析构顺序改变;代码 19 行会因为 x2 的生命周期太短而报错,无法通过编译。

@ZhangHanDong
Copy link
Owner

ZhangHanDong commented May 15, 2020

@zydxhs 感谢反馈。估计是rustc升级修改过了

@ZhangHanDong ZhangHanDong added the 第十三章 第十三章 label May 15, 2020
@ZhangHanDong ZhangHanDong added this to the 第二版 milestone Jun 22, 2020
@zydxhs zydxhs changed the title 第13.2.4节 无组析构顺序是确定的 第1版 第4次印刷 第13.2.4节 元组析构顺序是确定的 第1版 第4次印刷 Aug 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
第十三章 第十三章
Projects
None yet
Development

No branches or pull requests

2 participants