为什么"*mut T"实现了"Unwindsafe",而"&mut T"没有?



Unwindsafe文档中,我们有:

诸如&mutT 和&RefCell<T>之类的类型是不安全的。一般的想法是,默认情况下,任何可以在catch_unwind之间共享的可变状态都不是安全的。这是因为很容易在catch_unwind之外看到一个破碎的不变性,因为数据只是像往常一样访问。

按照这个逻辑,在我看来,*mut T不应该Unwindsafe.但事实证明是这样。为什么?

*mut T

是一个原始指针,它没有任何不变性。

它可以为 null,指向无效内存,它是Copy,并且您可以让其中两个指向内存中的同一区域。

无论如何,你没有什么可以多变和安全*mut T,所以没有理由不Unwindsafe.

相关内容

最新更新