У меня есть следующий код (есть еще этот код, например push_back () и insert (), но я вырезал их для релевантности:
// In header file for class:
template <typename T>
class MyVector
{
private:
T *m_data = nullptr; // Dynamic array or vector
int reserved_size; // Current max size of reserved_size
int data_size; // Current size of array
public:
T & at(int index);
}
// In .hpp file for class
template <typename T>
T & MyVector<T>::at(int index)
{
if(index >= data_size)
throw std::out_of_range ("Index out of range!");
return m_data[index]
}
// In main
int main()
{
MyVector<int> x;
x.push_back(1);
x.push_back(2);
// Max size of the array here would be 5 and you're trying to access index 10
x.at(10);
// Should throw an error here
}
Проблема в том, что когда я запускаю код, который он выводит: 'terminate вызывается после создания экземпляра' std :: out_of_range 'Aborted (core dumped)'
Массив заполнен 5 значениями: 1,2,3,4,5, а максимальный размер установлен в 10. Я звоню в (20), который явно не входит в индекс моего массива m_data. Я не знаю, в чем проблема, которая вызывает дамп ядра здесь. РЕДАКТИРОВАТЬ: я знаю, что на данный момент мне не хватает поймать для броска Как бы я go о добавлении этого? Я знаю, как сделать блоки try-catch для определенных вещей, но не для перехвата исключения std :: out_of_range.
Указания для этого назначения говорят, что это должно бросить исключение std :: out_of_range, когда выход за пределы, поэтому избежать обработки исключений здесь невозможно.