Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Хочу сделать универсальную процедуру, которая удаляет любой объект и присваивает ему значение NULL. Как делается обычно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Вместо последних двух строк хочу иметь следующую функцию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Всё отрабатывает без ошибок, но вот только деструктор класса не вызывается. Как исправить ? Я полагаю, что компилятор не понимает, что объект-указатель hObject относится к классу "A". Возможен ли вообще такой подход ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 12:17 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Может завести ещё 1 параметр и в функцию передавать тип объекта ? А потом при удалении через какой-нибудь cast приводить к этому типу и удалять ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 12:31 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
crush1Возможен ли вообще такой подход ? MyDeleteObject должна быть template. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 12:33 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
crush1, Передавай не LPVOID, а какой либо прародитель XMyObject*, и виртуальный деструктор тебя спасет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 12:57 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Еще можно сделать неправильно - макросом. Шаблоном не очень хорошо - сгенерится своя функция для каждого типа. Кроме того, нужно учитывать случай, когда у тебя массив объектов. http://www.cplusplus.com/reference/new/operator delete []/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 13:02 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 15:09 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
ЗимарглШаблоном не очень хорошо - сгенерится своя функция для каждого типа. И что тут плохого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 15:24 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИ что тут плохого? раздувание кода, разве это хорошо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 15:26 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
FishHookAnatoly MoskovskyИ что тут плохого? раздувание кода, разве это хорошо?монописуально. особенно в данном случае. А вот от лишней писанины избавит, и от ненужных бессмысленных наследований тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 15:58 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
egorychмонописуально. особенно в данном случае. Особенно в данном? crush1Хочу сделать универсальную процедуру, которая удаляет любой объект В пессимистическом варианте вы получите вариант функции для всех классов использующихся в программе. Ну вперёд, чо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 16:08 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Если функция действительно нужна всем классам програмы, то ручное написание всех её вариантов, безусловно, круче шаблона ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 16:11 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
FishHookНу вперёд, чо!функция то пипец огромная, 3 строчки, раздует код неимоверно Куда лучше не забыть все эти классы отнаследовать от Deletable. И потом долго медитировать, задлянафига это сделано вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 16:52 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
egorychFishHookНу вперёд, чо!функция то пипец огромная, 3 строчки, раздует код неимоверно Куда лучше не забыть все эти классы отнаследовать от Deletable. И потом долго медитировать, задлянафига это сделано вообще. Наследование - основополагающий принцип ООП в С-подобных языках. Если задача решается без метапрограммирования, то её нужно решать без метапрограммирования. А если я забуду отнаследоваться от Deletable, то получу ошибку компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 17:24 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
FishHookраздувание кода, разве это хорошо? Вы вообще видели объемы бинарников С++? Там на мегабайты идет речь, а вы тут со своим раздутием на пару Кбайтов ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 19:03 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
crush1, только макросом\шаблоном со всеми вытекающими ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 19:11 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyраздутием на пару Кбайтов пару килобайтов там, пару килобайтов сям, а потом сами же гундите на форумах "что ж за программы то пошли! Элементарная тулзовина полгигабайта отжирает! Вот в наше время в 64к умудрялись приличную игру засунуть! Совсем школота обленилась!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 19:31 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЗимарглШаблоном не очень хорошо - сгенерится своя функция для каждого типа. И что тут плохого? Я не говорил, что плохо. Некрасиво. К тому же ТС хочет чего то странного типа FreeAndNil, так что правильности построения я не советчик =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 20:40 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
crush1хочу иметь следующую функцию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Всё отрабатывает без ошибок, но вот только деструктор класса не вызывается. Как исправить ? Я полагаю, что компилятор не понимает, что объект-указатель hObject относится к классу "A". Возможен ли вообще такой подход ? Чтото мне подсказывает, что указатель a тут не изменится. Должна быть функция MyDeleteObject( T ** p_hObject){ .... *p_hObject = NULL; Не уверен, что будет работать грязный хак - приведение void ** p_hObject к произвольному классу, например к Deletable: delete (Deletable *)(*p_hObject); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 22:18 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
crush1Хочу сделать универсальную процедуру, которая удаляет любой объект и присваивает ему значение NULL. Как делается обычно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Вместо последних двух строк хочу иметь следующую функцию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Всё отрабатывает без ошибок, но вот только деструктор класса не вызывается. Как исправить ? Я полагаю, что компилятор не понимает, что объект-указатель hObject относится к классу "A". Возможен ли вообще такой подход ? да, все правильно. нет, такой подход невозможен, указатель должен быть типизированным. поэтому функция должна быть шаблонной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 22:50 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
crush1Может завести ещё 1 параметр и в функцию передавать тип объекта ? А потом при удалении через какой-нибудь cast приводить к этому типу и удалять ? тип нельзя передать как параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 22:50 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
ЗимарглЕще можно сделать неправильно - макросом. Шаблоном не очень хорошо - сгенерится своя функция для каждого типа. Кроме того, нужно учитывать случай, когда у тебя массив объектов. http://www.cplusplus.com/reference/new/operator delete[]/ ну и пусть генерируется, она тут же заинлайнится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 22:51 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
FishHookegorychмонописуально. особенно в данном случае. Особенно в данном? crush1Хочу сделать универсальную процедуру, которая удаляет любой объект В пессимистическом варианте вы получите вариант функции для всех классов использующихся в программе. Ну вперёд, чо! да и хрен с ним! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 22:53 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
такая функция, разумеется, должна принимать ссылку на указатель, чтобы иметь возможность его обнулять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 22:57 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
MasterZivтакая функция, разумеется, должна принимать ссылку на указатель, чтобы иметь возможность его обнулять. В "советах" читал, что ссылки следует всегда делать константными. Это в духе C, где переменные передаваемые по значению не менялись. Синтаксически в C++ передача переменной по ссылке и по значению не отличаются. Константная ссылка в C++ может принять временный объект или литерал, что расширяет область применения функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 00:09 |
|
||
|
Процедура удаления любого объекта
|
|||
|---|---|---|---|
|
#18+
mcureenabВ "советах" читал, что ссылки следует всегда делать константными. Либо это вредные советы, либо ты их неправильно читал. Константные ссылки используют вместо передачи по значению для того, чтобы не создавать временные объекты и тратить время на копи-конструктор. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 00:15 |
|
||
|
|

start [/forum/search_topic.php?author=maxim74&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
get settings: |
8ms |
get forum list: |
12ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 1576ms |
| total: | 1802ms |

| 0 / 0 |
