|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
Почему деструктор срабатывает больше раз, чем количество созданных объектов?18.01.2017, 16:35. Показов 10568. Ответов 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
|
||
|
Вездепух
13205 / 6840 / 1822
Регистрация: 18.10.2014
Сообщений: 17,298
|
||
| 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 раз больше, чем решка Используя статическую компоненту класса подсчитать количество созданных в программе объектов Почему событие срабатывает несколько раз Почему таймер срабатывает несколько раз? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|