C++编译器是不做变量的生命周期检查的,都是由码农来做这件事情,顶多有一些静态、动态检查工具可能会做。
所以编译期并不会发现这种问题。Rust编译器通过生命周期标记、类型推导以及move语义来检查这种问题。
运行期如果出问题,主要是靠CRT代码以及OS提供的异常处理API,但有些问题不一定能被CRT和OS API捕捉到,比如引用了已经被释放的内存但是并未导致access violation异常。
【 在 VincentGe 的大作中提到: 】
: 我阅读了那个帖子,非常棒,他讲述的很清晰,感谢你提供的这些。
: 对于这段Python,我贴出来的原因是它和CPP所犯的错误是相似的,而对于Python的使用者而言,它在Python的文档中的的常见问题中被回答,对于期望深入了解的开发者,可以使用dis包的dis来获取字节码,希望更想深入解释器,那这需要另行讨论。
: 我期望用此说明楼主所提供的CPP代码中的错误并非由使用带有gc语言所造成的惯性而带来的。
: ...................
--
FROM 123.118.184.*