как конвертировать boost :: weak_ptr в boost :: shared_ptr - PullRequest
3 голосов
/ 07 октября 2010

у меня есть shared_ptr и weak_ptr

typedef boost::weak_ptr<classname> classnamePtr;
typedef boost::shared_ptr<x> xPtr;

как преобразовать слабый_ptr в shared_ptr

shared_ptr = weak_ptr;
Xptr = classnameptr; ?????

Ответы [ 3 ]

8 голосов
/ 07 октября 2010

Как уже говорилось

boost::shared_ptr<Type> ptr = weak_ptr.lock(); 

Если вы не хотите исключение или просто используете конструктор приведения

boost::shared_ptr<Type> ptr(weak_ptr);

Будет выброшено, если слабый указатель уже удален.

7 голосов
/ 07 октября 2010

Вы не конвертируете weak_ptr в shared_ptr, так как это лишило бы смысла использование weak_ptr, во-первых.weak_ptr, звоните lock на weak_ptr.
Обычно вы делаете следующее:

weak_ptr<foo> wp = ...;

if (shared_ptr<foo> sp = wp.lock())
{
    // safe to use sp
}
2 голосов
/ 07 октября 2010
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>
...