Странное поведение std::vector

У меня есть такой класс:

class OBJ{...};

class A
{
   public:
   vector<OBJ> v;
   A(int SZ){v.clear(); v.reserve(SZ);}
};

A *a = new A(123);
OBJ something;
a->v.push_back(something);

Это упрощенная версия моего кода. Проблема в том, что в режиме отладки все работает идеально. Но в режиме релиза он вылетает на строке "push_back". (со всеми флагами оптимизации ВЫКЛ.) Я отлаживал его в режиме выпуска, и проблема в конструкторе A. Размер вектора очень большой с фиктивными значениями, и когда я его очищаю, он не меняется...

Ты знаешь почему?

Спасибо,


person Nima    schedule 27.05.2010    source источник
comment
Поскольку вектор хранит экземпляры OBJ напрямую (вместо указателей на OBJ), push_back будет копировать-конструировать экземпляры OBJ. Правильно ли реализован конструктор копирования для OBJ?   -  person Patrick    schedule 27.05.2010


Ответы (1)


Я могу предположить - я бы сказал, что OBJ, вероятно, не имеет правильно реализованного конструктора копирования и/или оператора присваивания и деструктора.

person Community    schedule 27.05.2010
comment
OBJ имеет конструктор, деструктор, конструктор копирования, конструктор по умолчанию. Мой вопрос: почему емкость вектора всегда очень велика? Я использовал clear() и resize(0). не работал.. - person Nima; 28.05.2010
comment
@Nima Тот факт, что они у него есть, делает еще более вероятным, что проблема именно в этом. Опубликуйте реальный код. - person ; 28.05.2010