повысить слабую трансляцию в shared_from_this () - PullRequest
5 голосов
/ 20 января 2009

Я использую общие указатели boost и enable_shared_from_this, чтобы включить возврат общего указателя на это. Код выглядит так:

class foo : public boost::enable_shared_from_this<foo>
{
  boost::shared_ptr<foo> get()
  {
    return shared_from_this();
  }
}

Зачем shared_from_this генерирует исключение слабой_пт_касты?

1 Ответ

8 голосов
/ 20 января 2009

Если вы объявили 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 до того, как конструктор будет готов, который снова попытается вернуть общий указатель, которого еще нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...