Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
Для чего это делается и как корректно удаляется объект, созданный на куче или в стеке(в виде автоматической переменной) при деструкторе базового класса, отличного от public virtual? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2015, 22:54 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
log_here, про virtual: если класс не планируется делать базовым, то и нет смысла делать виртуальный деструктор. про non-public: используется для реализации паттерна синглтон, он же - одиночка. Класс создаётся и удаляется через специальные статические функции, и, естественно, только в динамической памяти. Собственно, спрятать деструктор в private - простейший способ запретить создавать класс на стеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2015, 23:27 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
log_hereДля чего это делается и как корректно удаляется объект, созданный на куче или в стеке(в виде автоматической переменной) при деструкторе базового класса, отличного от public virtual? Попробуйте рассмотреть ситуацию "наоборот". :) Если вы собираетесь использовать полиморфизм применительно к деструктору, то вам нужен виртуальный паблик деструктор. Если вы не собираетесь это делать, то деструктор не должен быть виртуальным. Деструктор базового класса должен быть либо public&virtual, либо protected&non-virtual ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2015, 23:35 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
чччДДеструктор базового класса должен быть либо public&virtual, либо protected&non-virtual Второе требование (protected&non-virtual) означает отказ от расширения функциональности через наследование. Т.е. невозможен случай когда и базовый класс и наследник могут напрямую использоваться в программе. Например, пусть есть готовый класс String, а мы хотим создать класс String2 где все тоже плюс хранится кодировка строки. Но мы заходим на sql.ru и там сказано нельзя public non-virtual destructor, и все, придется вместо наследования делать агрегацию с методами обертками )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 00:24 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВторое требование (protected&non-virtual) означает отказ от расширения функциональности через наследование. Это, очевидно, было ещё до того, как в стандарт ввели слово final. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 00:30 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyчччДДеструктор базового класса должен быть либо public&virtual, либо protected&non-virtual Второе требование (protected&non-virtual) означает отказ от расширения функциональности через наследование... "А я что сказал?" - (с) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 00:37 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
чччД"А я что сказал?" - (с) :) Так я и говорю - бессмысленное требование, полностью противоречащее мультипарадигменности С++. С таким же успехом можно запретить указатели или еще какую -нибудь глупость придумать. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 04:20 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
чччДПопробуйте рассмотреть ситуацию "наоборот". :) Если вы собираетесь использовать полиморфизм применительно к деструктору, то вам нужен виртуальный паблик деструктор. Если вы не собираетесь это делать, то деструктор не должен быть виртуальным. Деструктор базового класса должен быть либо public&virtual, либо protected&non-virtual Всё правильно в коде и комментариях? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 08:45 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
log_hereЗачем в базовом классе делают деструктор, отличный от public Не public деструкторы делают, чтобы запретить создание объектов везде, кроме как в динамической памяти. На стеке и статически такой объект уже нельзя будет создать, потому что компилятор потребует вызов деструктора, и не сможет его найти. Такие объекты можно будет создать (а главное удалять) только из кода самого этого класса (private destructor) или ещё и из кода наследников (protected destructor). log_hereи даже отличный от virtual? Не понятно, почему "даже" -- область видимости и виртуальность деструктора никак не связаны. Обычно деструктор делают виртуальным, только если это нужно. В других случаях не делают этого. log_hereДля чего это делается и как корректно удаляется объект, созданный на куче или в стеке(в виде автоматической переменной) при деструкторе базового класса, отличного от public virtual? Кажется, я уже это пояснил. Никак. Нужно будет удалять объект только из кода самого класса или наследников, ну и friend-ы, конечно. Обычно делают для этого специальные функции создания и уничтожения объектов этих классов. Если иерархия, то часто создание идёт через фабрики класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 10:00 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyчччДДеструктор базового класса должен быть либо public&virtual, либо protected&non-virtual Второе требование (protected&non-virtual) означает отказ от расширения функциональности через наследование. Т.е. невозможен случай когда и базовый класс и наследник могут напрямую использоваться в программе. Например, пусть есть готовый класс String, а мы хотим создать класс String2 где все тоже плюс хранится кодировка строки. Но мы заходим на sql.ru и там сказано нельзя public non-virtual destructor, и все, придется вместо наследования делать агрегацию с методами обертками )) Я согласен с твоей критикой высказываний товарища Ч, но у тебя тоже не всё так однозначно, как ты пишешь. Накладываемые ограничения на самом деле гораздо слабее, чем "отказ от расширения функциональности через наследование" Невиртуальный деструктор накладывает только одно ограничение -- не удалять объект через полиморфный указатель (указатель на базовый класс). protected деструктор -- только что удаление может быть в коде класса, наследников или друзей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 10:07 |
|
||
|
Зачем в базовом классе делают деструктор, отличный от public и даже отличный от virtual?
|
|||
|---|---|---|---|
|
#18+
log_hereчччДПопробуйте рассмотреть ситуацию "наоборот". :) Если вы собираетесь использовать полиморфизм применительно к деструктору, то вам нужен виртуальный паблик деструктор. Если вы не собираетесь это делать, то деструктор не должен быть виртуальным. Деструктор базового класса должен быть либо public&virtual, либо protected&non-virtual Всё правильно в коде и комментариях? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Да, всё правильно, с учётом того, что код должен быть помещён в соотв. места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 10:09 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2018740]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
7ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 251ms |

| 0 / 0 |
