The final example at page 137 of Effective Modern C++ draws the scenario of a data structure with objects A
, B
, and C
in it, connected to each other via std::shared_ptr
in the following way:
std::shared_ptr std::shared_ptr
A -----------------> B <----------------- C
To me, this implies that the classes which objects A
and C
are instance of (two unrelated classes, in general) must contain a std::shared_ptr<classOfB>
member.
Then the supposition is made that we need a pointer from B
back to A
, and the available options are listed: the pointer can be raw, shared, or weak, and the last one is picked up as the best candidate.
std::shared_ptr std::shared_ptr
A -----------------> B <----------------- C
^ |
| |
\ std::weak_ptr /
\__________________/
I do understand the weaknesses (ahahah) of the first two alternatives, but I also see that the third alternative requires that member A
be already managed by some std::shared_ptr
, otherwise how can a std::weak_ptr
point to it at all?
However the book does not refer to this "limitation"/assumption/whatever, so the truth is either
- I'm wrong
- I'm right but that assumption is obvious for some reason I don't understand
- The assumption is obvious for the exact reason that a
std::weak_ptr
needs an already existingstd::shared_ptr
to the same object, but it's a bit strange it's not even mentioned at the beginning of the example, I think.
and I'm asking this question to understand this.
Aucun commentaire:
Enregistrer un commentaire