В книга Стандартная библиотека С++ на стр. 91 Я прочел это о shared_from_this()
:
Проблема заключается в том, что
shared_ptr
хранится в частном членеPerson
s базовый класс,enable_shared_from_this<>
, в концепостроение Человека.
Соответствующий фрагмент кода из книги:
class Person : public std::enable_shared_from_this<Person> {
...
};
Я не понимаю здесь двух вещей:
- кто этот
shared_ptr
, который хранит себя? - как он может хранить себя где-нибудь в конце конструкции
Person
? Я думаю, что построениеPerson
заканчивается последним утверждением его конструктора, написанным мной.
Я понимаю, что есть weak_ptr
, который еще не был инициализирован.
EDIT:
Спасибо Angew! shared_from_this
будет работать только после создания первого shared_ptr
до Person
. Этот shared_ptr
проверяет, унаследован ли класс Person
от enable_shared_from_this
, и если да, то инициализируйте его внутренний weak_ptr
.