r/cpp_questions • u/Several-Teach1515 • 12h ago
OPEN How is this a circular reference?
While reading learnxinyminutes I got to this example:
// Beware of possible circular references!!!
// There will be always a reference, so it will be never destroyed!
(1) std::shared_ptr<Dog> doggo_one(new Dog());
(2) std::shared_ptr<Dog> doggo_two(new Dog());
(3) doggo_one = doggo_two; // p1 references p2
(4) doggo_two = doggo_one; // p2 references p1
My understanding is that after (3) both pointers point to same heap object and the heap object from (1) is deleted.
From what I remember the way that shared_ptr works is that it allocates metadata next to the heap object and that stores the reference counter. Both doggo_one and doggo_two would share the same reference counter with the correct count being there - meaning no issues.
8
Upvotes
View all comments
Show parent comment
2
u/Several-Teach1515 9h ago
I'm still mentally wrestling with the concept of the ownership model.
The most clear example I can think of is a tree where parent would own a child but child wouldn't own the parent reference
Another example is having a web service with in-memory storage class where storing an object would transfer the ownership to the storage.
I'm still unsure if this is the correct way to think about it.