powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Процедура удаления любого объекта
25 сообщений из 55, страница 2 из 3
Процедура удаления любого объекта
    #39097887
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookAnatoly MoskovskyИ что тут плохого?
раздувание кода, разве это хорошо?

Что у вас за пренебрежительное отношение к обобщённому программированию. Использование макрофункций в С++ вообще нежелательно. В данном конкретном случае как минимум отсутствует проверка типов входных и выходных параметров функции, что приводит к потенциальным проблемам.

PS
Если не ошибаюсь даже просто макроимена(не макрофункции) в С++ нежелательно использовать. Это связано, как минимум, с возможными проблемами при отладке
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097911
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЧто у вас за пренебрежительное отношение к обобщённому программированию. Использование макрофункций в С++ вообще нежелательно. В данном конкретном случае как минимум отсутствует проверка типов входных и выходных параметров функции, что приводит к потенциальным проблемам.

PS
Если не ошибаюсь даже просто макроимена(не макрофункции) в С++ нежелательно использовать. Это связано, как минимум, с возможными проблемами при отладке

с чего вдруг она будет отсутствовать в шаблоне? даже жёстче чем в FreeAndNil дельфийском будет проверка типов

PPS: волков бояться, ...
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097914
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)SashaMercuryЧто у вас за пренебрежительное отношение к обобщённому программированию. Использование макрофункций в С++ вообще нежелательно. В данном конкретном случае как минимум отсутствует проверка типов входных и выходных параметров функции, что приводит к потенциальным проблемам.

PS
Если не ошибаюсь даже просто макроимена(не макрофункции) в С++ нежелательно использовать. Это связано, как минимум, с возможными проблемами при отладке

с чего вдруг она будет отсутствовать в шаблоне? даже жёстче чем в FreeAndNil дельфийском будет проверка типов

PPS: волков бояться, ...

вы меня не так поняли. или я неправильно пояснил. эта фраза относится к макрофункции аналогичной шаблону
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097984
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookЕсли задача решается без метапрограммирования, то её нужно решать без метапрограммирования.
ну, решите эту задачу для double * ))
PS какая-то религия запрещает метапрограммирование? Очень интересно. Можно поподробнее?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098082
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmcureenabВ "советах" читал, что ссылки следует всегда делать константными.

Либо это вредные советы, либо ты их неправильно читал. Константные ссылки используют
вместо передачи по значению для того, чтобы не создавать временные объекты и тратить время
на копи-конструктор.
Ссылки без const можно использовать ровно с той же целью. Тут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.

Для функций:
Код: plaintext
1.
2.
void f1(T x){...};
void f2(const T &x){...};



вызов выглядит одинаково:
Код: plaintext
1.
2.
f1(y);
f2(y);



Программист может ожидать, что и f1 и f2 не меняют y. Иного смысла в этом совете нет.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098173
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098279
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmcureenabТут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?

Тем боком, что тут нужна не ссылка на указатель, а указатель на указатель. Так будет легче читать программу.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098318
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТем боком, что тут нужна не ссылка на указатель, а указатель на указатель.
Так будет легче читать программу.
Да ну? С какого это перепугу FreeAndNil(&var) читается легче чем FreeAndNil(var)?
Не говоря уже о возможности злоупотреблений типа FreeAndNil((void*)12345).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098340
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору использовать шаблон unique_ptr и т.п. Smart Pointers.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098355
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТем боком, что тут нужна не ссылка на указатель, а указатель на указатель. Так будет легче читать программу.легче читать программу будет, если перестать называть функции f1, f2, а давать им осмысленные имена, как справедливо отметил Dimitry Sibiryakov.
mcureenabАвтору использовать шаблон unique_ptr и т.п. Smart Pointers.нуууу так не честно! эта фраза была заготовлена на 4ю страницу обсуждения
тут люди загоняются на шаблон инлайн-функции из 2х строк, а вы им предлагаете полноценный шаблонный класс использовать, этож как код-то распухнет то у них, жуть же просто )))
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098382
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmcureenabАвтору использовать шаблон unique_ptr и т.п. Smart Pointers.нуууу так не честно! эта фраза была заготовлена на 4ю страницу обсуждения Ой. Простите.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098428
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabMasterZivтакая функция, разумеется, должна принимать ссылку на указатель, чтобы иметь возможность его обнулять. В "советах" читал, что ссылки следует всегда делать константными.


Не в этом случае. Константные ссылки нужны когда объект по ссылке не меняется . В данном случае мы наоборот хотим его в функции менять.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098433
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmcureenabТут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?

Таким же, как и макросы. Никаким.

Искомая функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
template <typename T, void* nullptr = static_cast<void*>(0)>
void Delete( T*& p )
{
  if( p != nullptr )
  {
     delete p;
     p = nullptr;
  }
}




(могу наврать со static_cast<void*>(0) )
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098541
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivegorychпропущено...
мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?

Таким же, как и макросы. Никаким.

Искомая функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
template <typename T, void* nullptr = static_cast<void*>(0)>
void Delete( T*& p )
{
  if( p != nullptr )
  {
     delete p;
     p = nullptr;
  }
}


(могу наврать со static_cast<void*>(0) )

Да и nullptr тут тем же боком относится )))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
template <typename T>
void Delete( T*& p )
{
  if( p )
  {
     delete p;
     p = nullptr;
  }
}
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098548
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyДа и nullptr тут тем же боком относится )))
if - тоже лишний.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098571
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyДа и nullptr тут тем же боком относится )))
if - тоже лишний.
По большому счету - да.))
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098590
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе в этом случае. Константные ссылки нужны когда объект по ссылке не меняется . В данном случае мы наоборот хотим его в функции менять. Поэтому следует использовать указатель на указатель.
Стандартный delete не меняет сам указатель. А твой Delete меняет. Не гоже, чтобы они одинаково выглядели.
Код: plaintext
1.
2.
delete a;
Delete a;

Почему a обнулился? 8(
Код: plaintext
1.
2.
delete a;
Delete &a;

Тут все ясно. С самим a в Delete что то происходит.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098641
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDimitry Sibiryakovпропущено...

if - тоже лишний.
По большому счету - да.))

По большому счёту и вся функция лишняя.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098644
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabMasterZivНе в этом случае. Константные ссылки нужны когда объект по ссылке не меняется . В данном случае мы наоборот хотим его в функции менять. Поэтому следует использовать указатель на указатель.
Стандартный delete не меняет сам указатель. А твой Delete меняет. Не гоже, чтобы они одинаково выглядели.
Код: plaintext
1.
2.
delete a;
Delete a;

Почему a обнулился? 8(
Код: plaintext
1.
2.
delete a;
Delete &a;

Тут все ясно. С самим a в Delete что то происходит.

Это уже давно никого не интересующие бредни, по-моему.
Абсолютная дурость.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098767
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabСтандартный delete не меняет сам указатель. А твой Delete меняет. Не гоже, чтобы они одинаково выглядели.ну назови её не Delete, а clean, erase, destroy или как там ещё, хоть destroy_and_null().
Советы они такие советы. Особенно когда они начинаются со слов "никогда" ))
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098900
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivАбсолютная дурость.
она в изначальной постановке задачи - "Хочу сделать универсальную процедуру"
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099121
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, умников полно, ты бы человеку помог
мало ли как и что он назвал - процедура, макрос - понятно же что хочет

Код: plaintext
1.
  #define FreeAndNil(o)  {if (o) { delete o; o = NULL;}}



в дельфи правда ссылка сначала зануляется, а потом удаляется объект
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099123
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Изопропил, умников полно, ты бы человеку помог
я и пытаюсь помочь - предлагаю дурью не маяться
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099145
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилkealon(Ruslan)Изопропил, умников полно, ты бы человеку помог
я и пытаюсь помочь - предлагаю дурью не маяться
для тебя может дурь, для кого-то нужная вещь с гарантией нормальной работы и уж куда удобнее чем лапша if-ов в деструкторе в популярных книгах по С++

PS: я вот в питоне делал объект который вызывает исключение при любых операциях с ним, кроме присвоения. никому кроме меня такого не требовалось, а я дня два убил на чуть больше 200 строчек кода пока сделал, ладно подмогли иначе ещё бы неизвестно сколько делал
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099222
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)для тебя может дурь, для кого-то нужная вещь с гарантией нормальной работы Никакой гарантии тут нет. Один указатель занулил, десять копий остались. Попытки удалить не динамический объект так же не исключены.

Было бы так все шоколадно, со всякими умными указателями не заморачивались.
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Процедура удаления любого объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]