Назад к вопросам
Junior — Middle
87
Для чего используется умный указатель weak_ptr в C++ и как он отличается от shared_ptr?
Ответ от нейросети
sobes.tech AI
weak_ptr в C++ используется для хранения слабой ссылки на объект, управляемый shared_ptr, без увеличения счетчика ссылок. Это помогает избежать циклических зависимостей, которые могут привести к утечкам памяти.
Основные отличия:
shared_ptrвладеет объектом и увеличивает счетчик ссылок, гарантируя, что объект жив, пока есть хотя бы одинshared_ptr.weak_ptrне владеет объектом и не влияет на счетчик ссылок. Он позволяет проверить, существует ли объект, и получитьshared_ptr, если объект еще жив.
Пример:
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> sp = std::make_shared<int>(42);
std::weak_ptr<int> wp = sp; // не увеличивает счетчик
if (auto spt = wp.lock()) { // пытаемся получить shared_ptr
std::cout << "Объект существует: " << *spt << std::endl;
} else {
std::cout << "Объект удален" << std::endl;
}
sp.reset(); // объект удаляется, так как shared_ptr больше нет
if (wp.expired()) {
std::cout << "Объект больше не существует" << std::endl;
}
}