Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Непонятный вызов Деструкторов при создании списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Error 1 error C2447: '{' : missing function header (old-style formal list?) и почему не работает ? и подскажите как пользоваться wcout http://www.cyberforum.ru/cpp-beginners/thread790192.html
Всем привет я начинаю обучаться программированию и сегодня столкнулся с такой проблемой Error 1 error C2447: '{' : missing function header (old-style formal list?) и почему не работает ? и подскажите...
C++ Функция , Указатели , С++ , Задачка (среднее арифметическое все введенных чисел) задание было : создать функцию , которая вводит с клавиатуры последовательность целых чисел и после ввода последнего числа выводит на печать в главной функции среднее арифметическое все введенных... http://www.cyberforum.ru/cpp-beginners/thread790182.html
Нужен хороший совет! C++
Всем привет! Народ всем привет у меня вопрос вот я хочу связать свою жизнь с game-developingom(для этого я учу c++ и в скором времени буду учить 3д) ,для этого мне нужен ноутбук(я по 3-4 часа у...
C++ Составление грамматики
Кто делал задачу из книги Страуструпа "Принципы и практика использования С++": Напишите программу, проверяющую корректность предложений в соответствии с правилами грамматики английского языка из...
C++ ЛР: Сравнение сортировок http://www.cyberforum.ru/cpp-beginners/thread790173.html
нужно экспериментально сравнить временную сложность и провести качественный анализ трех сортировок: выбором шейкерная слиянием В коде программы для каждого реализуемого метода...
C++ Не присваевается значение Есть область памяти (строка), условно поделенная на две части A и B. Область B идет сразу после A. Заданы длины обоих частей. Используйте рекурсивный reverse(), чтобы поменять a и b местами.... подробнее

Показать сообщение отдельно
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
19.02.2013, 22:36
УУУУУРРРРРАААААААА!!!

Докопался) Вот в чем замес, смари:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
vector<AAA> L;  
     
   L.reserve(3);
 
   L.push_back(AAA(3));
   cout<<"\n";
   
   L.push_back(AAA(7));
   cout<<"\n";
 
   L.push_back(AAA(9));
   cout<<"\n";
     
   return 0;
Т.е. проблема была в том, что вектор каждый раз перераспределял память, когда требовалось добавить еще один элемент. Т.е. выделял по-новой память на 1 больше, для того, чтобы новый элемент поместился. Ну а старую, соответственно, удалял, отчего деструктор вызывался при push_back один раз - для временного объекта и еще для каждого, что до этого уже имелись в векторе, как следствие перераспределения памяти. Если зарезервировать нужное/или большее кол-во мест в памяти - таких издержек не будет. Кстати, это один из примеров оптимального использования vector.


Вот вывод, такой же, как и для списка. Но список не требует перераспределения памяти по понятным соображениям)
Vizvan Konstructor
Vizvan Destructor.

Vizvan Konstructor
Vizvan Destructor.

Vizvan Konstructor
Vizvan Destructor.

Vizvan Destructor.
Vizvan Destructor.
Vizvan Destructor.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru