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