LINUX.ORG.RU

c++ tr1 enable_shared_from_this

 ,


0

1

Есть такая штука, когда класс дополнительно наследует интерфейс enable_shared_from_this. т.е. можно сделать shared_ptr внутри функции этого-же класса.

Допустим есть класс A и функция foo которая возвращает shared_from_this

shared_ptr<A> a(new A());
shared_ptr<A> a1 = a->foo();

в этом случае количество ссылок будет 2? Или 1 на обоих указателях?

т.е. тупо создается shared_ptr, или уже учитываются ссылки на эту область памяти?

2, на то он и enable_shared_from_this, а как тебя сюда занесло? :)

wota ★★ ()

Во-первых, на всякий случай, shared_from_this работает только если изначально объект обернут в умный указатель. a = new A(); foo(a->shared_from_this) или сразу даст сегфолт, или при удалении, точно не помню.

В примере будет две ссылки на один объект, если foo возвращает shared_from_this.

note173 ★★★★★ ()
Ответ на: комментарий от note173

или сразу даст сегфолт, или при удалении

shared_from_this() кинет исключение, если еще нет ни одного shared_ptr.

gv ()
Ответ на: комментарий от gv

да, я проверил, придется отказаться от this из конструктора класса

pozitiffcat ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.