Работал ли с умными указателями · C/C++ Backend — JobPilot

Работал ли с умными указателями

C/C++ Backend · 22%
Вопрос 4130 / #
Пример ответа

Коротко: Да, я активно использовал умные указатели в C++ для управления памятью и предотвращения утечек в backend-разработке.

Ключевые идеи:
  • Применял std::unique_ptr для эксклюзивного владения ресурсами, что обеспечивает автоматическое освобождение памяти.
  • Использовал std::shared_ptr для разделяемого владения, особенно в асинхронных задачах или кэшировании данных.
  • Внедрял std::weak_ptr для предотвращения циклических ссылок в сложных структурах, таких как графы или деревья.
Пример: В проекте обработки сетевых запросов я использовал std::unique_ptr для управления сокетами: при создании соединения указатель владеет сокетом, а при завершении работы он автоматически закрывается, избегая утечек.
Пример использования std::unique_ptr и std::shared_ptr для управления ресурсами в backend-приложении
cpp
#include <memory>
#include <iostream>

class DatabaseConnection {
public:
    DatabaseConnection() { std::cout << "Database connection established\n"; }
    ~DatabaseConnection() { std::cout << "Database connection closed\n"; }
    void query(const std::string& sql) { std::cout << "Executing: " << sql << "\n"; }
};

int main() {
    // Использование std::unique_ptr для эксклюзивного владения
    std::unique_ptr<DatabaseConnection> conn = std::make_unique<DatabaseConnection>();
    conn->query("SELECT * FROM users");
    // Память автоматически освобождается при выходе из области видимости

    // Использование std::shared_ptr для разделяемого владения
    std::shared_ptr<DatabaseConnection> sharedConn = std::make_shared<DatabaseConnection>();
    auto anotherHandle = sharedConn; // Счётчик ссылок увеличивается
    sharedConn->query("UPDATE users SET name='John'");
    // Память освобождается, когда все shared_ptr выходят из области видимости

    return 0;
}
Вопросы для интервьюера:
  • Как вы выбираете между unique_ptr и shared_ptr в проекте?Я использую unique_ptr по умолчанию для эксклюзивного владения, а shared_ptr — только при необходимости разделяемого доступа, чтобы избежать накладных расходов на счётчик ссылок.
  • Сталкивались ли вы с проблемами производительности при использовании shared_ptr?Да, в высоконагруженных системах я оптимизировал, заменяя shared_ptr на unique_ptr с явной передачей владения или используя кэширование для уменьшения аллокаций.
Практический совет (на неделю):
  1. Начните с std::unique_ptr для большинства случаев управления памятью в C++ backend, чтобы упростить код и избежать утечек.
  2. При использовании std::shared_ptr, следите за циклическими ссылками с помощью std::weak_ptr и профилируйте производительность в критических секциях.
C/C++ Backend
Общий
22%
Навигация
Какие у тебя зарплатные ожидания
Следующий: Работал ли с STL
Предыдущий: Какие у тебя зарплатные ожидания

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.