有没有办法知道谁是对象的拥有者?让我们说类A将类B的指针保存为数据成员。 B有什么方法可以知道谁拥有他?
任何帮助对我来说都意味着很多。
答案 0 :(得分:5)
“所有权”的概念并非内置于C ++语言中。这是程序员用来理解他们自己的代码而不是语言特性的设计概念。通常它意味着一些代码实体负责释放资源(例如动态分配的对象),但有时它意味着不同的东西。
因此,对象无法确定其“所有权”,因为使用该对象的代码可能有多种方式来定义和管理所有权。
根据所有权在您的计划中的含义,boost::enable_shared_from_this
可能会对您有所帮助。它允许一个对象(或引用它的人)参与该对象的共享所有权,但它仍然不会告诉您希望与其共享的其他实体。因此,如果您实际上不需要了解A
的实例,那么它很有用,您只需要B
的实例不被释放。 A
以及对B
实例生命周期感兴趣的任何人都会使用shared_ptr
函数获得B
到shared_from_this
。
如果您需要B
来访问A
的实例,那么您必须创建自己的机制。例如,您可以在A
的实例中存储指向B
实例的指针。