Каким образом можно создать расширение или наследовать функциональность контейнера std::vector в C++?

В C++ класс std::vector не предназначен для наследования, так как у него нет виртуального деструктора, и наследование может привести к неопределённому поведению.

Короткий ответ

Что ответить на собеседовании

В C++ класс std::vector не предназначен для наследования, так как у него нет виртуального деструктора, и наследование может привести к неопределённому поведению.

Подробный разбор

Ответ с пояснениями

В C++ класс std::vector не предназначен для наследования, так как у него нет виртуального деструктора, и наследование может привести к неопределённому поведению.

Чтобы расширить функциональность std::vector, обычно используют композицию — создают свой класс, который содержит std::vector как член, и добавляют нужные методы:

#include <vector>

template<typename T>
class MyVector {
private:
    std::vector<T> data;
public:
    void push_back(const T& value) {
        data.push_back(value);
    }
    // Добавляем новые методы
    void print_all() const {
        for (const auto& item : data) {
            std::cout << item << " ";
        }
        std::cout << std::endl;
    }
    // Можно добавить доступ к элементам и другие методы
};

Если же наследование необходимо, то нужно быть осторожным и понимать риски, связанные с отсутствием виртуального деструктора в std::vector.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку