|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
Почему деструктор срабатывает больше раз, чем количество созданных объектов?18.01.2017, 16:35. Показов 10233. Ответов 111
Метки нет (Все метки)
Вопрос в заголовке темы. Почему? Создается всего 2 объекта, но деструктор вызывается трижды.
Вот пример
Ещё интересует вот что. Если описать деструктор, нужно ли описывать ещё и деструктор по умолчанию? Если нет, то каким образом происходит освобождение памяти, которое было занято для объекта (речь о простых типах)
0
|
||||||
| 18.01.2017, 16:35 | |
|
Ответы с готовыми решениями:
111
Можно ли обеспечить взаимодействие программно созданных объектов и объектов, созданных мастером
Почему у двух созданных объектов одинаковые имена |
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 20.01.2017, 09:56 [ТС] | |||
|
Но там была именно речь о том что Type *t = new Type; может выделить памяти больше чем sizeof(Type) И мне все таки не понятно зачем и в каких случаях такое может происходить. Максимальный оверхед который встречал от new это было в связано выравниванием а это по сути копейки и только на пользу. Иногда это вредно если например структуру хочется передать по сети, то тут уже sizeof не подходит и можно воспользоваться прагмой или вручную суммировать sizeof каждого элемента структуры. Хорошо было бы если MrGluck уточнил что он имеет ввиду
0
|
|||
|
Неэпический
|
||
| 20.01.2017, 10:27 | ||
|
А для этого ему нужно знать количество элементов, а значит их нужно где-то хранить, например, выделить памяти чуть больше и поместить размер в самое начало. Можно ли обойти динамический массив не зная его размер?
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 20.01.2017, 10:34 [ТС] | ||
|
Croessmah,
Спасибо. Но там была оговорка что это не всегда может быть нужно
0
|
||
|
Неэпический
|
||
| 20.01.2017, 10:45 | ||
|
то нет смысла пихать размер впереди. По той же ссылке чуть ниже есть рисунок, так же есть примерчики изменения этого хвоста.
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 20.01.2017, 10:48 [ТС] | ||
|
Добавлено через 28 секунд А примерчики посмотрю, спасибо )
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 20.01.2017, 11:32 [ТС] | |
|
Croessmah,
Ну если в таком случае хвост создается то это уже скорее проблема кривого компилятора Разве нет?
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 20.01.2017, 19:28 | ||
|
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 21.01.2017, 20:42 [ТС] | ||
|
Для операций вставки у вектора, дека и контейнеров, которые основаны на std::array не предусмотрено "бросание исключений". Если например операция вставки в вектор оказалось не удачной, то гарантируется что никаких последствий не будет в т.ч и исключений. То есть либо получится вставить новый элемент, либо нет и ничего плохого не произойдет. При вставке в вектор если есть возможность, используется конструктор перемещения для вставляемого элемента, иначе конструктор копирования Ввиду того, что исключений для операций вставки в вектор не предусмотрено, для обеспечения поведения "либо получится вставить новый элемент, либо нет и ничего плохого не произойдет", конструктор перемещения должен гарантировать что он не собирается бросать исключение, это обеспечивается ключевым словом noexcept. В этом случае вектор имеет право использовать конструктор перемещения потому что для вставки нового элемента в вектор соблюдается принцип "не бросать исключение". Если же перемещающий конструктор не соблюдает этот принцип, то при вставке нового элемента вектор не может полагаться на конструктор перемещения и использует конструктор копирования. Добавлено через 46 минут Если это описание к данному вопросу правильное, то почему если убрать noexcept у конструктора копирования добавление все равно происходит успешно http://rextester.com/CKBJU14850 Так же интересно почему копирование и перемещение в этом примере срабатывает успешно? Там же переопределены эти конструкторы а их тело пусто. Соответственно логика копирования и перемещения не реализована но тем не менее все работает. Как это понимать?
0
|
||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
|
||
| 21.01.2017, 21:16 | ||
|
Выравнивание адреса памяти
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 21.01.2017, 21:26 [ТС] | |
|
TheCalligrapher,
Все еще продолжаю изучение, и потому что постоянно что-то читаю по С++ некоторая информация полученная ранее частенько вылетает из головы... Видимо HD в голове не большой ))
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 21.01.2017, 22:31 | ||
|
А вот под какими надо было быть веществами чтобы трактовать noexcept не как No-throw guarantee с UB в случае броска исключения, а как catch(...){std::abort();} это, действительно, загадка. Зашибись логика - пишешь компилятору "да нету у меня здесь исключений, нету! No-throw guarantee здесь!", а он кивает головой "ну раз нету, я тут код для обработки не существующих исключений добавлю, ладно?".
2
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 22.01.2017, 00:11 [ТС] | ||
|
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 22.01.2017, 03:21 | |||
|
If the operation inserts a single element at the end, and no reallocations happen, there are no changes in the container in case of exception (strong guarantee). In case of reallocations, the strong guarantee is also given in this case if the type of the elements is either copyable or no-throw moveable. Otherwise, the container is guaranteed to end in a valid state (basic guarantee).
1
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||
| 22.01.2017, 17:35 | ||
|
Оверхеда не дается никакого, зато в случае человеческой ошибки мы получаем быстрое падение и дамп, что много лучше странных и трудновоспроизводимых багов.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 22.01.2017, 17:43 | |||
|
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 22.01.2017, 19:50 | ||
|
Добавлено через 6 минут А то что константные/не константные это как то к делу не относится по всей видимости. Хотя бы потому как на каждый const найдется свой mutable.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 22.01.2017, 20:09 | |||
|
0
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||||
| 22.01.2017, 20:20 | ||||
|
Добавлено через 7 минут И кстати раз уж что-то про винду, то https://msdn.microsoft.com/en-... eycx5.aspx - как можно оттюнить поведение.
0
|
||||
| 22.01.2017, 20:20 | |
|
Помогаю со студенческими работами здесь
100
Монета брошена 800 раз. Найти вероятность того, что «герб» выпадет на 20 раз больше, чем решка Используя статическую компоненту класса подсчитать количество созданных в программе объектов Почему событие срабатывает несколько раз Почему таймер срабатывает несколько раз? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|