Назад к вопросам
Junior — Middle
94
Объясните, что представляет собой умная указка weak_ptr и как она отличается от shared_ptr в C++?
Ответ от нейросети
sobes.tech AI
weak_ptr и shared_ptr — это умные указатели в C++, которые управляют временем жизни объектов.
- shared_ptr владеет объектом и хранит счетчик ссылок. Объект удаляется, когда последний
shared_ptrна него уничтожается. - weak_ptr не владеет объектом и не увеличивает счетчик ссылок. Он используется для наблюдения за объектом, управляемым
shared_ptr, без продления его жизни.
Основное отличие:
weak_ptrпозволяет избежать циклических ссылок, которые могут привести к утечкам памяти, так как не влияет на счетчик ссылок.- Чтобы получить доступ к объекту из
weak_ptr, нужно вызвать методlock(), который возвращаетshared_ptrесли объект еще существует, или пустойshared_ptr, если объект уже удален.
Пример:
std::shared_ptr<int> sp = std::make_shared<int>(10);
std::weak_ptr<int> wp = sp; // wp не увеличивает счетчик
if (auto spt = wp.lock()) { // пытаемся получить shared_ptr
std::cout << *spt << std::endl; // безопасно использовать объект
} else {
std::cout << "Объект уже удален" << std::endl;
}