Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
9
Почему наследовать от std::vector считается плохой практикой
Условие задачи
Обсудите, почему использование наследования от std::vector считается небезопасным и нежелательным, хотя синтаксически это возможно.
// Перемещающий оператор присваивания
_CONSTEXPR20_CONTAINER vector& operator=(vector&& _Right) noexcept(
_Move_assign<_Right, _Choose_pocma<_Alty>>()) {
if (this != _STD addressof(_Right)) {
_Move_assign(_Right, _Choose_pocma<_Alty>{});
}
return *this;
}
// Деструктор
_CONSTEXPR20_CONTAINER ~vector() noexcept {
_Tidy();
# if _ITERATOR_DEBUG_LEVEL != 0
auto&& _Alproxy = _GET_PROXY_ALLOCATOR(_Alty, _Getal());
_Delete_plain_internal(_Alproxy, _STD exchange(_Mypair._Myval2._Myproxy, nullptr));
# endif
}
// Приватный метод добавления элемента
template <class... _Valty>
_CONSTEXPR20_CONTAINER decltype(auto)
_Emplace_back_with_unused_capacity(_Valty&&... _Val) {
auto& _My_data = _Mypair._Myval2;
pointer& _Mylast = _My_data._Mylast;
_STL_INTERNAL_CHECK(_Mylast != _My_data._Myend); // проверка свободного места
_Alty_traits::construct(_Getal(), _Unfancy(_Mylast), _STD forward<_Valty>(_Val)...);
_Orphan_range(_Mylast, _Mylast);
_Ty& _Result = *_Mylast;
++_Mylast;
# if _HAS_CXX17
return _Result;
# else
(void)_Result;
# endif
}
Что может пойти не так, если объявить такой класс:
class MyVector : public std::vector<int> {
std::string metadata;
};