2013-09-01 27 views
2

有什麼方法可以知道誰是對象的所有者?比方說,類A持有類B的指針作爲數據成員。 B有什麼方法可以知道誰擁有他?如何知道對象的所有者類別

任何幫助對我來說都是非常重要的。

+7

如果多個對象持有指向B實例的指針會怎樣? –

+1

如果你想讓一個類知道它的「所有者」(在不同的上下文中它可能意味着很多東西),那麼你必須將一個指向所有者的指針傳遞給該類的構造函數並存儲它。 –

+1

沒有辦法做到這一點。如果你想要一個對象的概念被另一個對象所擁有,你必須在一些代碼中實現它。這些細節很大程度上取決於你想要做什麼。 – john

回答

5

「所有權」的概念並未嵌入到C++語言中。這是程序員用來理解他們自己的代碼而不是語言功能的設計概念。通常它意味着一些負責釋放資源的代碼實體(例如動態分配的對象),但有時它意味着不同的東西。

因此,對象一般無法確定其「所有權」,因爲使用對象的代碼可能定義和管理所有權的方式不止一種。

根據您程序中的所有權意味着什麼,boost::enable_shared_from_this可能會對您有所幫助。它允許一個對象(或者有引用的對象)參與該對象的共享所有權,但它仍然不會告訴你需要與之共享的其他實體。因此,如果您實際上不需要知道A的實例,那麼只需要B的實例不會被髮布即可。 A以及其他對B實例的生命週期感興趣的其他人都將保留使用shared_from_this函數獲取的shared_ptrB

如果您需要B來訪問A的實例,那麼您將不得不創建自己的機制。例如,您可以在B的實例中存儲指向A實例的指針。

相關問題