我主要是一名 C++ 程序员,而且我已经习惯于使用 , 等类模板std::unique_ptr
来std::shared_ptr
表达我的对象的所有权。Delphi 在其标准库中有类似的东西吗?在编写代码时,是否有任何表达对象所有权的最佳实践?
编辑:由于 C++11 成为标准,有两个轻量级帮助类,std::shared_ptr
和std::unique_ptr
.
如果我创建一个 type 的变量std::shared_ptr<int>
,它代表一个指向具有共享所有权的 int 的指针:在底层是引用计数的,当引用计数达到零时,指针会自动释放。这种类型表达了一种“共享所有权”,其中许多对象在使用完资源后共同承担销毁资源的责任。
相反,std::unique_ptr
表示单一所有权。当 unique_ptr 超出范围时,资源会自动释放。std::unique_ptr 不能被复制:一次只能有一个对象拥有该资源,并且只有一个对象负责清理该对象。
将这些轻量级类与指向 int 的裸指针进行对比,它可以表示共享所有权、唯一所有权,也可以只是对其他地方对象的引用!类型什么也没告诉你。
我的问题是:由于 Delphi 支持持有对对象的引用,是否有任何机制来明确声明“我是这个对象的唯一所有者,当我完成它时,我会释放它”,而不是“我只是保留一个为了与之交互而引用这个对象,但其他人会清理它”与“我与许多其他对象共享这个对象,最后拥有它的人可以清理它。”
我知道 Collections.Generics 有不同的集合,例如TList
vs TObjectList
,其中 TObjectList 将释放存储在其中的成员,但 TList 不会。您可以说 TObjectList “拥有”它的元素,而 TList 没有。这是我问题的本质,真的。在设计我自己的类时,有没有办法在语言中直接表达这些所有权问题?或者是否有开发人员常用的最佳实践/命名约定?