у меня есть 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; ?????
Как уже говорилось
boost::shared_ptr<Type> ptr = weak_ptr.lock();
Если вы не хотите исключение или просто используете конструктор приведения
boost::shared_ptr<Type> ptr(weak_ptr);
Будет выброшено, если слабый указатель уже удален.
Вы не конвертируете weak_ptr в shared_ptr, так как это лишило бы смысла использование weak_ptr, во-первых.weak_ptr, звоните lock на weak_ptr. Обычно вы делаете следующее:
weak_ptr
shared_ptr
lock
weak_ptr<foo> wp = ...; if (shared_ptr<foo> sp = wp.lock()) { // safe to use sp }
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>