In the book at page 91 in chapter i have read this phrase about
The problem is thatstores itself in a private member of
’s base class,
Person, at the end of
the construction of the Person.
The reason is simple: in object
enable_shared_from_this works by initialising a hidden
weak_ptr with a copy of the first
shared_ptr which points to object
X. However, for a
shared_ptr to be able to point to
X must already exist (it must be already constructed). Therefore, while the constructor of
X is running, there is yet no
enable_shared_from_this could use.
Take this piece of code:
std::shared_ptr<Person> p(new Person());
Before the constructor of
p (of the
shared_ptr) is even called, its argument must be evaluated. That argument is the expression
new Person(). Therefore, the constructor of
Person runs before the constructor of
p has even begun and before there is any
shared_ptr object to which
enable_shared_from_this could bind.