Junior — Middle
What is std::weak_ptr and what problem does it help solve in memory management?
sobes.tech AI
Answer from AI
std::weak_ptr is used to solve the problem of cyclic references when managing memory with smart pointers (std::shared_ptr).
When two or more objects reference each other through shared_ptr, the reference count never becomes zero, and memory is not released — leading to a leak.
weak_ptr does not increase the reference count but allows safe access to the object if it still exists. This helps:
- Break ownership cycles, preventing memory leaks.
- Check if the object exists before using it.
Example:
#include <memory>
#include <iostream>
struct Node {
std::shared_ptr<Node> next;
std::weak_ptr<Node> prev; // weak_ptr to prevent cycle
};
int main() {
auto first = std::make_shared<Node>();
auto second = std::make_shared<Node>();
first->next = second;
second->prev = first; // weak_ptr does not increase the count
// When first and second go out of scope, memory is released correctly
}
Thus, std::weak_ptr helps manage the lifecycle of objects without creating cyclic dependencies.