Russian Qt Forum
Ноябрь 05, 2024, 17:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос про указатели  (Прочитано 5024 раз)
merke
Гость
« : Февраль 12, 2011, 11:45 »

Всем привет!
Прошу не пинать!)
Пишу на Qt приличное время. Но всё же остались пробелы.
Объясните во такой момент.

Чем вот это:

Код:
QList<QTcpSocket> lstSoc;
Отличается от:

Код:
QList<QTcpSocket*> lstSoc;
Записан
TheAthlete
Гость
« Ответ #1 : Февраль 12, 2011, 12:04 »

QList<QTcpSocket> lstSoc;
означает, что ты создаешь связанный список элементов типа QTcpSocket

QList<QTcpSocket*> lstSoc;
означает, что ты создаешь связанный список указателей на тип QTcpSocket

т.е. если "развернуть" все это в переменные, то получится примерно следующее
QTcpSocket lstSoc;
QTcpSocket* lstSoc;

естественно, в случае списка их будет n-е количество
Записан
merke
Гость
« Ответ #2 : Февраль 12, 2011, 12:12 »

Наверное вопрос не понятно я задал...

Попробую по другому. В чем преимущество если я буду в списке использовать указатели?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Февраль 12, 2011, 12:30 »

Цитировать
Попробую по другому. В чем преимущество если я буду в списке использовать указатели?
В общем случае не в чём. Всё зависит от задачи.
Записан

Qt 5.11/4.8.7 (X11/Win)
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #4 : Февраль 12, 2011, 13:02 »

Цитировать
Попробую по другому. В чем преимущество если я буду в списке использовать указатели?

Будет выше скорость работы, особенно при операциях копирования контейнеров.
Из минусов, если у элементов (на которые ссылается указатель из QList) нет родителя, необходимо будет самому удалять элементы в цикле.

При хранении объектов, а не указателей, при выходи из области видимости, контейнер уничтожается и вызывает деструктор каждого элемента.
Записан
alexman
Гость
« Ответ #5 : Февраль 12, 2011, 13:08 »

Если объект используется в нескольких местах, то удобно использовать указатель на него...отсюда и преимущество QList<QTcpSocket*>.
Записан
merke
Гость
« Ответ #6 : Февраль 12, 2011, 13:09 »

спасибо!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Февраль 12, 2011, 13:49 »

Конкретно для контейнера QList хранение указателей ничего не выигрывает (а только проигрывает), т.к. QList<QTcpSocket> распределяет память для каждого элемента и сам (скрыто) хранит массив указателей на них. Хранить адреса элементов можно - они не изменятся. Ну может использовать указатели из соображений "общности" - все это только для QList, потом нельзя будет заменить его на др. контейнер.
Записан
kirill
Гость
« Ответ #8 : Февраль 14, 2011, 16:17 »

В первом случае ты создаешь n элементов на стеке и помещаешь их в список. В список они копируются, исходные копии по выходу из области видимости разрушаются.

Во втором случае ты создаешь указатели на объекты, которые еще не созданы. Их нужно создать на куче и заполнить список. По окончании работы с объектами их нужно будет удалить. В первом случае они уничтожатся самостоятельно.

Предпочтительнее использовать второй метод, т.к. операции копирования объектов довольно затратные.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.155 секунд. Запросов: 23.