1 | |||||||||||
конструкторы копий11.08.2012, 15:56. Показов 1430. Ответов 22
Метки нет (Все метки)
1) правильно ли я понял задание
Как тут написано Грубой ли ошибкой будет всегда создавать конструктор копий не надеясь на синтезируемый конструктор?
0
|
11.08.2012, 15:56 | |
Ответы с готовыми решениями:
22
Конструктор копий Конструктор копий констр. копий Конструктор копий |
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.08.2012, 16:04 | 4 |
Задание понял правильно, а реализация содержит ошибку. Объект *psting не был создан, а в него производится присваивание.
Это не будет ошибкой (при условии, что реализован он правильно). Но при добавлении членов к классу придётся не забывать обновлять конструктор копий, иначе часть членов не будет копироваться.
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
11.08.2012, 16:10 | 7 | |||||
Ага. Или так:
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.08.2012, 16:30 | 8 |
Avazart, Не сказал бы, что это так уж полезно.) Нужно прописывать деструктор, если есть что уничтожать или же класс подразумевается как базовый для некоторого другого.
2
|
11.08.2012, 17:00 | 9 |
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.08.2012, 17:26 | 10 |
Avazart, там беда в отсутствии именно виртуального деструктора. Да, если есть хотя бы небольшой шанс, что класс будет базовым и использоваться полиморфно, то деструктор обязательно надо создавать. Но не для того, чтобы просто его создать, а для того, чтобы сделать его виртуальным.
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.08.2012, 18:05 | 12 |
В наследниках можно не объявлять, если деструктор ничего не делает. Отменить виртуальность деструктора не удастся.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.08.2012, 18:12 | 14 |
Если в базовом деструктор отсутствует, то при неполиморфном использовании ничего плохого не случиться. Но если объект потомка будет удаляться через указатель на базовый класс (то есть полиморфно), то при отсутствии виртуального деструктора в базовом классе будет вызван деструктор именно базового класса (такой вот парадокс), а деструктор потомка вызван не будет. Отсюда возможная утечка ресурсов, выделенных в конструкторе потомка.
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.08.2012, 18:35 | 16 |
В принципе да. Если память динамически выделяют объекты, которые являются членами класса-потомка. Раз деструктор потомка не вызывается, то и его члены не будут разрушены (для них тоже не будут вызваны деструкторы).
Добавлено через 44 секунды Правда теперь я углубился в теорию, пойду проверю на практике
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
11.08.2012, 18:57 | 18 | |||||
Вот. В случае объекта с номером 3 вызывается только деструктор базового объекта, в отличие от 1, 2 и 4
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
11.08.2012, 21:07 | 19 | |||||
Я дико извиняусьпока я дошел до дому(читай другой кампупер) тут такого понаписали
пример
Че чесно?
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.08.2012, 21:27 | 20 |
Вопрос-то наоборот ставился: будет ли ошибкой всегда создавать свой конструктор копирования, даже в тех случаях, когда динамического выделения ресурсов нет (то есть когда компилятор создаёт приемлемый вариант).
0
|
11.08.2012, 21:27 | |
11.08.2012, 21:27 | |
Помогаю со студенческими работами здесь
20
Вызов конструктора копий Вызов конструктора копий Конструктор копий по умолчанию. Классы: конструктор копий Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |