Название: QValueList... можно ли так делать? Отправлено: Kosh от Декабрь 27, 2006, 17:16 Мне надо хранить список массивов char[256]. Я использовала QValueList
Код:
только гложет сомнение, не является ли в этом случае codes списком указателей. Может надо так? Код:
Подскажите, какой вариант правильный. Название: QValueList... можно ли так делать? Отправлено: Alexandr Az от Декабрь 27, 2006, 17:35 В любом случае у Вас будет список указателей, т.к. вы определили шаблон с char*. Если бы можно было бы записать QValueList<char[256]>, то у Вас хранились бы реальные значения. char - не класс, а тип С, посему у него не может быть конструктора копирования. А что страшного что указатели? (кроме того что нужно следить за освобождением ресурсов). Можете использовать QStringList для хранения строк (если у вас конечно строки) и преобразовывать его к char когда нужно...
Хотя если честно я не понимаю как он аппенд делает тогда....... Название: QValueList... можно ли так делать? Отправлено: Kosh от Декабрь 27, 2006, 18:09 Втом-то и дело, что это не строки. Вобщем, скорей всего это второй вариант. Хотя пробовала так
Код:
никакого удара по памяти не состоялось. Вот это меня удивляет и пугает. А вдруг, они наворотили,так что создаётся список массивов? А, всё равно буду второй вариант использовать... Все равно скоро Новый год!!! ) и голова уже не варит, а пальцы цепляются за соседние клавиши. Название: QValueList... можно ли так делать? Отправлено: Dendy от Декабрь 27, 2006, 18:59 Указатель, он и в Африке указатель. Никто кроме Вас не знает, откуда вьІ будете его инициализировать, вьІделять в куче кусок памяти или требуется набор ссьІлок на уже вьІделенную память, например, для скорости обращения.
В любом из случаев Ваша задача идентична такой: Код: QValueList<QByteArray> codes; Нужно вьІделить память, делаете так: Код: codes << QByteArray( 256, 0 ); Нужно проинициализировать указателями на уже готовьІе данньІе, делаете так: Код: codes << another_code; При етом во втором случае скопируется только указатель, глубокой копии не будет. Отличие такого метода от хранения указателей в том, что не нужно заботиться об утечках памяти ни в первом, ни во втором случае. Ваш последний пример довольно... странньІй. Код: QValueList<char*> codes; ВьІ сохраняете в codes указатель на статический буфер. Потом читаете из потока в етот указатель, то-есть в статическую переменную c. Почему бьІ тогда просто не записать: Код: char c[256]; Подозреваю, что считанньІе данньІе нужно сохранить для дальнейшей обработке, например, если codes глобальная переменная, или вот так: Код: QValueList<char*> codes; Только вот в Вашем варианте ничего не получится. При вьІходе из функции статическая память очистится и в списке значений codes будут лежать указатели на мусор. Советую делать через QValueList<QByteArray>. Только помните, что в Qt3 в отличии от Qt4 класс QByteArray Explicitly Shared, а не Implicitly Shared. Хотя в Вашем случае ето не имеет значения. Название: QValueList... можно ли так делать? Отправлено: Tonal от Декабрь 27, 2006, 20:09 Можно ещё совсем просто:
Код:
Название: QValueList... можно ли так делать? Отправлено: Kosh от Январь 09, 2007, 16:48 Цитата: "Tonal" Можно ещё совсем просто... Этим и кончилось. Спасибо. |