C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
Вопрос на собеседовании

Что такое умные указатели в C++ (std::unique_ptr, std::shared_ptr, std::weak_ptr), и чем они отличаются друг от друга?

Ответ ⬇️
Умные указатели в C++ автоматизируют управление памятью и помогают избежать утечек памяти. Они находятся в заголовке <memory>.

std::unique_ptr владеет ресурсом единолично. При уничтожении указателя ресурс освобождается.
std::shared_ptr позволяет нескольким указателям совместно владеть ресурсом. Ресурс освобождается, когда последний shared_ptr уничтожается.
std::weak_ptr предоставляет доступ к ресурсу, но не увеличивает счётчик ссылок. Используется для предотвращения циклических зависимостей.


Пример использования ⚙️
#include <iostream>
#include <memory>

int main() {
// unique_ptr: единоличное владение
std::unique_ptr<int> uptr = std::make_unique<int>(10);
std::cout << "unique_ptr: " << *uptr << "\n";

// shared_ptr: совместное владение
std::shared_ptr<int> sptr1 = std::make_shared<int>(20);
std::shared_ptr<int> sptr2 = sptr1; // sptr2 теперь также владеет ресурсом
std::cout << "shared_ptr: " << *sptr1 << ", use_count: " << sptr1.use_count() << "\n";

// weak_ptr: не увеличивает счётчик ссылок
std::weak_ptr<int> wptr = sptr1;
if (auto locked = wptr.lock()) {
std::cout << "weak_ptr: " << *locked << "\n";
}

return 0;
}


C++ Learning 👩‍💻
⚙️ std::ranges::for_each

В C++20 функция std::ranges::for_each из заголовка <algorithm> позволяет применять заданную функцию к элементам диапазона с учётом новой концепции Range-based. Это упрощает работу с контейнерами и итераторами.

C++ Learning 👩‍💻
⚙️ std::chrono

В C++ библиотека <chrono> предоставляет инструменты для измерения времени выполнения кода с высокой точностью. Это полезно для профилирования производительности и оптимизации.

C++ Learning 👩‍💻
🤔 Как это работает? — C++: Умные указатели std::shared_ptr

В C++ умные указатели помогают управлять памятью автоматически. Давайте разберёмся, как работает std::shared_ptr.

➡️ Как это работает:

• std::shared_ptr<MyClass> ptr1 создаёт умный указатель ptr1, который владеет объектом MyClass.
• ptr2 = ptr1 делает ptr2 ещё одним владельцем того же объекта.
• ptr1.use_count() возвращает количество умных указателей, владеющих объектом.

Когда последний std::shared_ptr перестанет существовать, объект будет автоматически удалён.

C++ Learning 👩‍💻
The owner of this channel has been inactive for the last 18 months. If they remain inactive for the next 8 days, they may lose their account and admin rights in this channel. The contents of the channel will remain accessible for all users.