Цитата:
Сообщение от alexey_ma
Что-то намешано у тебя и С и С++.
|
Пишу как умею

. Начал недавно переходить с С на С++. С бинарными файлами на С++ я не работал ещё, поэтому решил изпользовать стандартную библиотеку С (чтобы не тратить лишнее время на поиск множества багов, кот. всегда выскакивают, когда начинаешь что-то изучать).
Цитата:
Сообщение от alexey_ma
Именно поэтому и происходит креш, вектор при добавлении элемента плоско копирует структуру. Получается две структуры имееющие указатель на один и тот -же адрес. Это христоматийная ошибка.
|
Ошибка будет, если изменять строку и из вектора и из структуры, а если нет, то какая тут ошибка?
В проге структура используется только для инициализации и чтобы запихнуться в вектор.
Цитата:
Сообщение от alexey_ma
Вектор на самом деле при удалении элемента вызывет для него деструктор.
|
Для этого деструктор и писался

. В первом посте это и написано. Проблема, только что нигде перед использованием НЕ удаляются элементы из вектора и как было также написано деструкторы элементов НЕ вызывались.
Цитата:
Сообщение от Drakosha
Во первых, на g++ 3.4.4 всё пашет
Во вторых, если где-то создаётся временный объект TS, например при выполенении этой строчки: vec.push_back(s); то деструктор может быть вызван им.
|
Да похоже программисты Microsoft что-то с STL перемудрили и действительно где-то у них создаётся временный объект. Хотя это мне кажется странным, т.к. для больших объектов из-за этого скорость должна сильно упасть!!!!!!
Цитата:
Сообщение от Drakosha
Поэтому для объектов с поинтерами всегда стоит писать operator= и copy constructor.
|
Дело в том, что писать их не хотелось, ибо каждая такая операция медленная и причём НЕнужная (Имхо).
З.Ы. Как я понял, изящней последнего решения (то, кот. с наследованием) в моём первом после ничего не придумано. Его я и реализовал.