Если вы объявили foo в стеке, чтобы не было других общих указателей на foo. Например:
void bar()
{
foo fooby;
fooby.get();
}
fooby.get () выдаст исключение weak_ptr_cast
.
Чтобы обойти это, объявите fooby
в куче:
void bar()
{
boost::shared_ptr<foo> pFooby = boost::shared_ptr<foo>(new foo());
pFooby->get();
}
Другая возможность состоит в том, что вы пытаетесь использовать shared_from_this
до того, как конструктор будет готов, который снова попытается вернуть общий указатель, которого еще нет.