Трюк по отладке std::vector[]
Коллега на одной из старых работ (Fitting Reality) по имени Володя Коломеец как-то столкнулся с такой проблемой по отладке приложения:
При использовании std::vector::operator[] выходил за пределы массива.
Ему хотелось бы поймать программный exception, чтобы сделать необходимые действия и выслать отчёт о падении по почте и т.д.
Понашаманил такой код и мне кажется, что он может быть полезен всем:
// file my_vec.h#ifndef MY_VEC_H_#define MY_VEC_H_//-----------------------------------------------------------------//#include <vector>//-----------------------------------------------------------------//#ifdef USE_MY_VECTORnamespace std{ template <class T> class MyVec : public std::vector<T> { public: typedef typename std::vector<T>::reference base_reference; typedef typename std::vector<T>::const_reference base_const_reference; typedef typename std::vector<T>::difference_type base_difference_type; base_reference operator[](base_difference_type _Off) { return at(_Off); } const_reference operator[](difference_type _Off) const { return at(_Off); } };}#define vector MyVec//-----------------------------------------------------------------//#endif//-----------------------------------------------------------------//#endif //MY_VEC_H_// highlight with http://tohtml.com/
Пользоваться этим надо так определить макрос USE_MY_VECTOR и инклудить прежде всего "my_vec.h", прежде чем инклудить системный <vector> в исходниках, где есть подозрение на проблему (или по всему проекты автозаменой)