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_ptrneeds an already existingstd::shared_ptrto 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