Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: navrocky от Сентябрь 08, 2010, 19:38



Название: free_and_nil. Delphi посвящается
Отправлено: navrocky от Сентябрь 08, 2010, 19:38
Довольно частая задача при работе с обычными указателями - зачистка после освобождения. Этот подход лучше взять за правило, уменьшает количество часов проведенных в отладке..

Код
C++ (Qt)
/*! Delete obj and assign NULL */
template <class T>
void free_and_nil(T*& obj)
{
   delete obj;
   obj = NULL;
}
 


Название: 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
Довольно частая задача при работе с обычными указателями - зачистка после освобождения. Этот подход лучше взять за правило, уменьшает количество часов проведенных в отладке..

Код
C++ (Qt)
/*! Delete obj and assign NULL */
template <class T>
void free_and_nil(T*& obj)
{
   delete obj;
   obj = NULL;
}
 

Делал то же самое в С++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
Довольно частая задача при работе с обычными указателями - зачистка после освобождения. Этот подход лучше взять за правило, уменьшает количество часов проведенных в отладке..

Код
C++ (Qt)
/*! Delete obj and assign NULL */
template <class T>
void free_and_nil(T*& obj)
{
   delete obj;
   obj = NULL;
}
 
Полностью согласен
#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;
Ну разве что, считается, что дефайны не очень хорошо.. а так да, вариант