Безопасно ли хранить локальный объявленный объект в глобальном QList? - PullRequest
1 голос
/ 19 апреля 2011

Я получил программу CPP, в которой я создаю локальный объект A и хочу сохранить его в глобальном объекте B, который представляет собой QList.

Сохраняется ли он для статического размещения объекта A или мне нужно использовать новое ключевое слово.Использует ли QList конструктор копирования?

Спасибо

Ответы [ 4 ]

4 голосов
/ 19 апреля 2011

QList хранит копии объектов, поэтому он должен работать. Однако убедитесь, что копирование действительно то, что вы хотите. Если это не так, выделите ваш объект с new и сохраните указатель в QList.

0 голосов
/ 20 апреля 2011

QList имеет только указатель на его содержимое. Поэтому, когда вы делаете копию QList, он на самом деле не копирует все содержимое, он просто копирует указатель. Всякий раз, когда вы изменяете список, создается копия, чтобы гарантировать, что он не изменяет содержимое других объектов. Смотрите это: http://doc.qt.nokia.com/4.7-snapshot/qshareddatapointer.html

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

Другим решением будет использование QSharedDataPointer для создания функциональности, аналогичной QList.

Обратите внимание, что большинство классов Qt уже используют это, поэтому если ваш класс содержит вещи, перечисленные здесь: http://doc.qt.nokia.com/4.7-snapshot/implicit-sharing.html В некоторой степени нет необходимости использовать QSharedDataPointer.

Есть одна вещь, которую вы не прояснили и которая имеет отношение, я думаю. Вы хотите, чтобы глобальный статический объект A имел те же данные, что и объект в списке?

Это достигается с помощью указателей или QExplicitlySharedDataPointer.

QExplicitlySharedDataPointer во многом совпадает с QSharedDataPointer, за одним исключением. Он не делает копию данных при изменении. Вот некоторая документация http://doc.qt.nokia.com/4.7-snapshot/qexplicitlyshareddatapointer.html

Я часто использовал эти классы и нашел их очень полезными и совсем не сложными в использовании.

0 голосов
/ 19 апреля 2011

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

0 голосов
/ 19 апреля 2011

Нету. QList хранит список указателей на объекты, поэтому локальные переменные не должны храниться в глобальном QList.

проверьте эту ссылку для деталей:

http://twl.pl/jtz/Inne/QT-Tutorial/qlist.html#details

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...