| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Проблема с деструктором |
| Автор: htzg 8.9.2010, 18:39 | ||||
| Народ! Есть проблема! Создал класс. Компилятор его проглатывает. Но! Что то не то с деструктором. При запуске программа останавливается и выдается след. сообщение: "Unhandled exception at 0x77b21fe0 in Prop-test1.exe: 0xC0000005: Access violation reading location 0x0000ffff" Курсором указывает на
Помогите разобраться!
|
| Автор: icecrashldr 8.9.2010, 18:55 | ||
|
| Автор: Sartorius 8.9.2010, 18:56 |
| push_back на сколько я помню конструктор копирования вызывает, которого у тебя нет. Получаем неинициализированне объекты в векторе |
| Автор: htzg 8.9.2010, 19:18 | ||
| не подскажите как правильно конструктор копирования в моем случае создать...? Я создаю, та же ошибка
|
| Автор: Sartorius 8.9.2010, 19:58 |
| Так дефолтный делает - копирует поля. Нужно создать массив с такими же размерностями как исходного объекта ( можешь Set вызвать) и скопировать все значения. |
| Автор: htzg 8.9.2010, 20:06 | ||
| Спасибо большое! Сработало! Добавлено через 2 минуты и 45 секунд Выкладываю окончательный вариант
|
| Автор: bsa 8.9.2010, 21:32 |
| htzg, вот ты используешь в своей программе вектор. Почему бы его не использовать везде вместо new/delete? |
| Автор: htzg 8.9.2010, 23:39 |
| это, кстати, хороший вопрос! Элементы данного трех мерного массива в процессе работы программы будут очень часто меняться. Т.е. будут обращения к определенным элементам и присвоение им новых значений. Здесь критична скорость. Вопрос: обращение к элементам вектора через функцию at() или iterator будет происходить с такой же скоростью как через указатели в статическом массиве? По мне так в случае с вектором должно быть медленнее. Ваше мнение? |
| Автор: mes 9.9.2010, 00:07 |
через at() будет медленее, так как имеется проверка на попадание в диапазон а через оператор[] при включенной оптимизации будет также. |
| Автор: borisbn 9.9.2010, 06:52 |
| > Вопрос: обращение к элементам вектора через функцию at() или iterator будет происходить с такой же скоростью как через указатели в статическом массиве? 1. Это зависит от реализации STL 2. Думаю эти расходы - ничто по сравнению с расходами самой программы, да и преждевременная оптимизация - корень зла (С) не помню чей ( м.б. Александреску? ) 3. Всегда можно взять сначала адрес первого элемента вектора int * p = & array[ 0 ]; а затем использовать p[ i ] |