Название: Вопрос про указатели Отправлено: merke от Февраль 12, 2011, 11:45 Всем привет!
Прошу не пинать!) Пишу на Qt приличное время. Но всё же остались пробелы. Объясните во такой момент. Чем вот это: Код: QList<QTcpSocket> lstSoc; Код: QList<QTcpSocket*> lstSoc; Название: Re: Вопрос про указатели Отправлено: TheAthlete от Февраль 12, 2011, 12:04 QList<QTcpSocket> lstSoc;
означает, что ты создаешь связанный список элементов типа QTcpSocket QList<QTcpSocket*> lstSoc; означает, что ты создаешь связанный список указателей на тип QTcpSocket т.е. если "развернуть" все это в переменные, то получится примерно следующее QTcpSocket lstSoc; QTcpSocket* lstSoc; естественно, в случае списка их будет n-е количество Название: Re: Вопрос про указатели Отправлено: merke от Февраль 12, 2011, 12:12 Наверное вопрос не понятно я задал...
Попробую по другому. В чем преимущество если я буду в списке использовать указатели? Название: Re: Вопрос про указатели Отправлено: GreatSnake от Февраль 12, 2011, 12:30 Цитировать Попробую по другому. В чем преимущество если я буду в списке использовать указатели? В общем случае не в чём. Всё зависит от задачи. Название: Re: Вопрос про указатели Отправлено: Sergey B. от Февраль 12, 2011, 13:02 Цитировать Попробую по другому. В чем преимущество если я буду в списке использовать указатели? Будет выше скорость работы, особенно при операциях копирования контейнеров. Из минусов, если у элементов (на которые ссылается указатель из QList) нет родителя, необходимо будет самому удалять элементы в цикле. При хранении объектов, а не указателей, при выходи из области видимости, контейнер уничтожается и вызывает деструктор каждого элемента. Название: Re: Вопрос про указатели Отправлено: alexman от Февраль 12, 2011, 13:08 Если объект используется в нескольких местах, то удобно использовать указатель на него...отсюда и преимущество QList<QTcpSocket*>.
Название: Re: Вопрос про указатели Отправлено: merke от Февраль 12, 2011, 13:09 спасибо!
Название: Re: Вопрос про указатели Отправлено: Igors от Февраль 12, 2011, 13:49 Конкретно для контейнера QList хранение указателей ничего не выигрывает (а только проигрывает), т.к. QList<QTcpSocket> распределяет память для каждого элемента и сам (скрыто) хранит массив указателей на них. Хранить адреса элементов можно - они не изменятся. Ну может использовать указатели из соображений "общности" - все это только для QList, потом нельзя будет заменить его на др. контейнер.
Название: Re: Вопрос про указатели Отправлено: kirill от Февраль 14, 2011, 16:17 В первом случае ты создаешь n элементов на стеке и помещаешь их в список. В список они копируются, исходные копии по выходу из области видимости разрушаются.
Во втором случае ты создаешь указатели на объекты, которые еще не созданы. Их нужно создать на куче и заполнить список. По окончании работы с объектами их нужно будет удалить. В первом случае они уничтожатся самостоятельно. Предпочтительнее использовать второй метод, т.к. операции копирования объектов довольно затратные. |