系统编程语言Rust使用ownership范式,以确保在必须释放资源时,在编译时以零成本运行.
在C++中,我们通常使用智能指针来实现隐藏资源管理的复杂性的相同目标.不过有几个不同之处:
- 在 rust 蚀中,只有一个所有者,而C++
shared_ptr
可以很容易泄漏所有权. - 在 rust 迹中,我们可以borrow 我们不拥有的引用,而C++
unique_ptr
不能通过weak_ptr
和lock()
以安全的方式共享. - 参考计数
shared_ptr
是昂贵的.
我的问题是:我们如何在以下约束中模拟C++中的所有权范型:
- 任何时候只有一个所有者
- 可以borrow 一个指针并暂时使用它,而不必担心资源超出范围(
observer_ptr
对这个没用) - 尽可能多的编译时判断.
Edit:考虑到目前为止的 comments ,我们可以得出结论:
-
在编译器中没有对这一点的编译时支持(我希望有大约
decltype
个我不知道的模板魔法).可能在其他地方使用静态分析(污染?) -
如果没有引用计数,就不可能得到这个.
-
没有标准的实现来区分
shared_ptr
和拥有或borrow 语义 -
可以通过创建
shared_ptr
和weak_ptr
左右的包装器类型来实现:-
owned_ptr
:不可复制,移动语义,封装共享\u ptr,访问borrowed_ptr
-
borrowed_ptr
:可复制,封装weak_ptr
,锁定方法 -
locked_ptr
:不可复制,移动语义,封装了锁weak_ptr
中的shared_ptr
-