2012-08-26 3 views
0

Предположим, у меня есть два boost::shared_ptr «S, указывающие на двух различных объектов class A:Совместное владение повышение :: 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_ptr и boost::shared_ptr assignment. Вы можете проверить это, проверив счетчик ссылок до и после назначения. В этом примере используется C++ 11-х std::shared_ptr но boost::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

Звучит неплохо, спасибо! –

Смежные вопросы