Тема: std::vector
Показать сообщение отдельно
Старый 30.01.2006, 13:22     # 6
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Цитата:
Crazy_kettle:
Да похоже программисты Microsoft что-то с STL перемудрили и действительно где-то у них создаётся временный объект. Хотя это мне кажется странным, т.к. для больших объектов из-за этого скорость должна сильно упасть!!!!!!
Ничего тут мудрого нет. Повторяю еще раз медленно. Ты создал структуру (назовем его ts), при попытке добавления это структуры в в вектор создается новый обьект (назовем его ts1) , в ts1 копируется ts. Поскольку копи-конструктора у тебя нет, то копируется плоско - тоесть ПОБАЙТНО. В итоге получаем две структуры содержащие указатель на одну и ту-же область памяти. Для обеих структур вызывается деструктор (не обязательно при удалении из вектора, у тебя просто обьекты выходят из скопа, то есть кончается их время жизни) и пытается дважды освободить один и тот же указатель. В итоге креш. Я же писал Обьекты помещаемые в стандартные (stl) контейнеры должны иметь копи-конструкторы. . Не надо косить на Microsoft, лучше изучи как работать с STL. Это давно уже стандарт языка С++. И писать надо не как умею , а как того требуют правила языка. Не стыдно быть чайником - стыдно им оставаться.

Цитата:
Drakosha
Но неизвестно какая там имплементация, всё таки где-то он копируется
Еще как известно. STL - это библиотека шаблонов и поставляется в исходниках
__________________
Best Regards
alexey_ma вне форума