2

有没有办法知道谁是对象的所有者?假设 A 类将 B 类的指针作为数据成员。B有什么办法可以知道谁拥有他?

任何帮助对我来说都非常重要。

4

1 回答 1

6

“所有权”的概念没有内置在 C++ 语言中。这是程序员用来理解自己代码的设计概念,而不是语言特性。通常它意味着一些代码实体负责释放资源(例如动态分配的对象),但有时它意味着不同的东西。

所以一般来说,一个对象没有办法确定它的“所有权”,因为使用该对象的代码可以定义和管理所有权的方式不止一种。

根据所有权在您的程序中的含义,boost::enable_shared_from_this可能会对您有所帮助。它允许一个对象(或引用它的人)参与该对象的共享所有权,但它仍然没有告诉您想要与它共享的其他实体。因此,如果您实际上不需要了解 的实例,则它很有用A,您只需B要不释放的实例即可。A,以及对 的实例的生命周期感兴趣的任何其他人B,都会持有他们shared_ptr使用Bshared_from_this函数获得的内容。

如果您需要B访问的实例,A那么您将必须创建自己的机制。例如,您也许可以将指向 的实例的指针存储A在 的实例中B

于 2013-09-01T15:23:51.763 回答