23 дек. 2012 г.

C++11: std::enable_shared_from_this, исключение std::bad_weak_ptr


Ссылки


Если при вызове shared_from_this() генерируется исключение  std::bad_weak_ptr, это означает, что еще не существует ни одного std::shared_ptr, ссылающегося на объект. См. Notes.

Неправильно:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <memory>

struct Class : std::enable_shared_from_this<Class>
{};

int main()
{
    Class *c = new Class;
    
    c->shared_from_this();
    
    return 0;
}

terminate called after throwing an instance of 'std::bad_weak_ptr'
  what():  std::bad_weak_ptr

Правильно:

#include <memory>

struct Class : std::enable_shared_from_this<Class>
{};

int main()
{
    Class *c = new Class;
    
    std::shared_ptr<Class> sc(c);
    
    c->shared_from_this();
    
    return 0;
}

Комментариев нет:

Отправить комментарий