Название: free_and_nil. Delphi посвящается Отправлено: navrocky от Сентябрь 08, 2010, 19:38 Довольно частая задача при работе с обычными указателями - зачистка после освобождения. Этот подход лучше взять за правило, уменьшает количество часов проведенных в отладке..
Код
Название: Re: free_and_nil. Delphi посвящается Отправлено: Sancho_s_rancho от Сентябрь 08, 2010, 19:51 QPointer, черт побери, вы все-таки его изобрели!
Название: Re: free_and_nil. Delphi посвящается Отправлено: navrocky от Сентябрь 08, 2010, 23:34 QPointer, черт побери, вы все-таки его изобрели! да нет же :) не все классы в плюсцах унаследованы от QObject...Название: Re: free_and_nil. Delphi посвящается Отправлено: Akon от Сентябрь 09, 2010, 16:31 Довольно частая задача при работе с обычными указателями - зачистка после освобождения. Этот подход лучше взять за правило, уменьшает количество часов проведенных в отладке.. Код
Делал то же самое в С++Builder! Тока у меня был в точности аналогичный макро FREE_AND_NULL! Шаблоны я тогда как-то не юзал. В делфи, насколько помню, задача решается естественным образом: obj := nil; Название: Re: free_and_nil. Delphi посвящается Отправлено: Авварон от Сентябрь 09, 2010, 16:45 внесу свои 5 копеек о бесполезности данной функции и полезности QPointer
Речь идет лишь о написании приложений с использованием Qt. Логически так сложилось, что в qt есть разделение на "сущности" и "данные". Сущности - это класс, представляющий некий объект реального мира. Такие объекты можно нельзя отличить друг от друга по их свойствам - к примеру есть 2 виджета одинакового размера, в одних координатах. Все их свойства одинаковы, но это разные объекты. И есть данные, по сути набор значений. При работе с 2мя такими классами нас не интересует один ли объект это, или два - нам важно значение. В Qt принято соглашение объекты 1го типа наследовать от QObject и передавать по указателю, а объекты 2го - либо делать страктом, либо использовать шаред поинтер и передавать по значению. Название: Re: free_and_nil. Delphi посвящается Отправлено: BigZ от Сентябрь 09, 2010, 17:10 Довольно частая задача при работе с обычными указателями - зачистка после освобождения. Этот подход лучше взять за правило, уменьшает количество часов проведенных в отладке.. Полностью согласен Код
#define free_and_nil(x) delete x; x = 0; Название: Re: free_and_nil. Delphi посвящается Отправлено: Akon от Сентябрь 09, 2010, 20:16 внесу свои 5 копеек о бесполезности данной функции и полезности QPointer Речь идет лишь о написании приложений с использованием Qt. Логически так сложилось, что в qt есть разделение на "сущности" и "данные". Сущности - это класс, представляющий некий объект реального мира. Такие объекты можно нельзя отличить друг от друга по их свойствам - к примеру есть 2 виджета одинакового размера, в одних координатах. Все их свойства одинаковы, но это разные объекты. И есть данные, по сути набор значений. При работе с 2мя такими классами нас не интересует один ли объект это, или два - нам важно значение. В Qt принято соглашение объекты 1го типа наследовать от QObject и передавать по указателю, а объекты 2го - либо делать страктом, либо использовать шаред поинтер и передавать по значению. Не совсем понял, как все это относится к теме ??? Спору нет, для QObject типов QPointer самое оно (с Qt 4.5, если не ошибаюсь, рекомендуется использовать QWeakPointer). В общем случае (для произвольных типов) можно использовать связку QSharedPointer/QWeakPointer или, если без Qt, boost::shared_ptr/boost::weak_ptr. Описанное автором решение, ИМХО, имеет право на жизнь как исключительно легковесный и простой вариант. Название: Re: free_and_nil. Delphi посвящается Отправлено: navrocky от Сентябрь 10, 2010, 09:01 Полностью согласен Ну разве что, считается, что дефайны не очень хорошо.. а так да, вариант#define free_and_nil(x) delete x; x = 0; |