| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > vector как массив классов |
| Автор: Folk 25.5.2008, 08:14 | ||||||||||
| Всем доброго времени суток. Прошу пояснить некоторую ситуацию. Я использую VS 2005, хотя думаю это непринципиально. Есть такой простой класс:
Если сделать так:
то в консоли увидим:
Откуда взялись два вызова дуструктора после создания объекта? И ещё, если сделать так:
То в консоли видим:
Тут два вопроса: 1. Почему конструктор вызван единожды? 2. Опять же, откуда 3 вызова дектрукторов сразу после создания объектов? Заранее спасибо. |
| Автор: anatox91 25.5.2008, 08:38 |
| по-моему это разрушается еще и временный объект |
| Автор: Folk 25.5.2008, 11:08 | ||||||
Ага, тогда с твоим вариантом класса и таким вот кодом:
Получаем вот это:
Стало быть при добавлении нового элемента в вектор внутри создаётся ещё две рабочие копии исходного объекта. А если у меня массивные объекты, жрут много памяти и при копировании объекта требуется выполнение множества операций, то при одном добавлении такого объекта в вектор я получу огромную потерю просто из-за того, что он создаёт две временные копии? |
| Автор: Daevaorn 25.5.2008, 12:37 | ||
Да. Поэтому надо хранить указатели в каких-то обертках. |
| Автор: Folk 25.5.2008, 13:40 |
Например? У меня как раз сейчас класс хранит в себе два достаточно больших массива. А массив этих классов хранится в векторе, |
| Автор: mes 25.5.2008, 13:51 | ||
храни в классе указатель на динамический массив с подсчетом ссылок или в вектор запихивай указатель на свой класс |
| Автор: Folk 25.5.2008, 15:19 |
| Спасибо всем за ответы, теперь стало ясно! |