Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 16.09.2014
Сообщений: 9

Вектор классов. Число конструкторов элементов меньше числа деструкторов. Как так ?

10.11.2015, 06:42. Показов 2774. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Разбираюсь с stl с++11 в частности с векторами. Имеем простейший код в котором просто заполняем вектор классами контактов:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <vector>
 
using namespace std;
 
class contact
{
public:
     contact(int id, const string &name) noexcept: _id(id), _name(name)
     {
        cout << "CTOR" << endl;
     };
    ~contact()
     {
        cout << "dtor" << endl;
     };
private:
    int    _id;
    string _name;
};
 
int main()
{
    size_t count = 4;   // допустим пользователь ввел число контактов
 
    vector<contact> contact_vector;
    // заполняем вектор
    for (size_t i = 0; i < count; ++i)
        contact_vector.push_back( contact( i, "vasya") );
 
    cout << "--- destructors after exit ---" << endl;
    return 0;
}
в результате получаем число вызванных конструкторов: 4, как и ожидалось. А число вызовов деструкторов: 11 !
Откуда такая цифра в количестве деструкторов? Должно быть по идее 4. Может кто нибудь пояснить? Компилятор: mingw492_32
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2015, 06:42
Ответы с готовыми решениями:

Разработка классов, создание конструкторов и деструкторов
Здравствуйте, помогите решить следующее задание: Постpоить класс для pаботы со cтpоками. Класс должен включать следующие поля: массив...

Как реализовать набор конструкторов и деструкторов
Делаю так: #include &lt;iostream&gt; class Time //начало объявления класса { public: //начало раздела public Time(int...

Порядок вызова конструкторов/деструкторов
Вопрос чисто теоретический. Попробую сформулировать, не ругайте если получится коряво. Например, есть некий класс для писанины в лог,...

20
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.11.2015, 22:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ivanmara Посмотреть сообщение
весь вектор копируется в новый вектор
вектор сам по себе никуда не копируется.
он выделяет новый непрерывный блок памяти,
куда перемещает объекты.
если у них нет конструктора перемещения - тогда копирует.

Цитата Сообщение от ivanmara Посмотреть сообщение
заменяем std::vector на std::list и проблемы как не бывало.
на самом деле все не так однозначно.
и по хорошему нужно делать тесты.

у листа есть свои проблемы.
он не кэшфрендли, и аллоцирует объекты раскидывая их по всей куче.
конечно, здесь многое зависит от аллокатора.
но по дефолту, вставка ещё одного объекта - это тормозная операция по выделению объекта в куче.

настолько тормозная, что при относительно малом количестве элементов,
частая вставка в лист может обойтись дороже,
чем единократный реалок вектора + запуски конструкторов перемещения,
при вставке в серединку.


конструкторы перемещения практически мгновенно отработают
(если по уму сделаны). и вектор может выиграть тест за счет меньшего количества
тормозных операций по выделению памяти.

а реалочится он с запасом, один раз на всю толпу.
в отличие от листа, который делает это для каждого объекта.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2015, 22:37

Наследование - вызов конструкторов и деструкторов
Делаю два класса - предок и потомок: class class_1_type { private: int t; public: class_1_type(int t_) { t = t_; cout...

Правильное использование конструкторов и деструкторов
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class Worker {public: ...

Задание с использованием конструкторов и деструкторов
Нужна ваша помощь. Само задание: Разработать класс - СТУДЕНТ. В закрытой части определить данные: фамилия, номер зачетной книжки,...

Использование конструкторов и деструкторов
Решить задачу в консольном режиме Даны целые числа K, N и набор из N целых чисел. Если в наборе присутствует число, меньшее K, то...

Использование конструкторов и деструкторов
Решить в консольном режиме: Дан набор из N вещественных чисел. Проверить, образует ли данный набор возрастающую последовательность. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru