Junior — Middle
Magyarázza el, mi az a weak_ptr okosmutató, és miben különbözik a shared_ptr-től C++-ban.
sobes.tech MI
Válasz az MI-től
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;
}