2012-08-26 66 views
0

假設我有指着class A兩個不同的對象在兩個boost::shared_ptr的:共享升壓的所有權::施工後的shared_ptr

boost::shared_ptr<A> x = boost::make_shared<A>(); 
boost::shared_ptr<A> y = boost::make_shared<A>(); 

在某個時候,我需要x放棄它擁有的對象的所有權和與y共享y的對象所有權。這是如何實現的(注意這兩個shared_ptr都是在那個時候構建的,所以沒有機會使用複製構造函數)?

謝謝!

回答

4

你可以簡單地給它分配:

x = y; 

assignment operators for std::shared_ptrboost::shared_ptr assignment。您可以通過檢查分配前後的引用計數來驗證此情況。此示例使用C++ 11的std::shared_ptrboost::shared_ptr會產生相同的結果:

#include <memory> 
int main() 
{ 
    std::shared_ptr<int> x(new int); 
    std::cout << x.use_count() << "\n"; // 1 
    std::shared_ptr<int> y(new int); 
    std::cout << x.use_count() << "\n"; // still 1 
    y = x; 
    std::cout << x.use_count() << "\n"; // 2 
} 
+0

根據該文件,賦值運算符互換(即不共享)的所有權,對吧? –

+0

@HaithamGad它共享RHS指針的所有權,所以'x'放棄它所構建的指針的所有權,並共享由'y'管理的指針的所有權。 – juanchopanza

+0

聽起來不錯,謝謝! –