Тема: std::vector
Показать сообщение отдельно
Старый 29.01.2006, 22:54     # 4
Crazy_kettle
Junior Member
 
Регистрация: 13.05.2004
Сообщения: 128

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

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

Последний раз редактировалось Crazy_kettle; 29.01.2006 в 23:03.
Crazy_kettle вне форума