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