В книга Стандартная библиотека С++ на стр. 91 Я прочел это о shared_from_this():
Проблема заключается в том, что
shared_ptrхранится в частном членеPersons базовый класс,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.