Junior — Middle
Hogyan lehet létrehozni egy kiterjesztést vagy örökölni a std::vector konténer funkcionalitását C++-ban?
sobes.tech MI
Válasz az MI-től
В 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.