Указатель, он и в Африке указатель. Никто кроме Вас не знает, откуда вьІ будете его инициализировать, вьІделять в куче кусок памяти или требуется набор ссьІлок на уже вьІделенную память, например, для скорости обращения.
В любом из случаев Ваша задача идентична такой:
QValueList<QByteArray> codes;
Нужно вьІделить память, делаете так:
codes << QByteArray( 256, 0 );
Нужно проинициализировать указателями на уже готовьІе данньІе, делаете так:
При етом во втором случае скопируется только указатель, глубокой копии не будет.
Отличие такого метода от хранения указателей в том, что не нужно заботиться об утечках памяти ни в первом, ни во втором случае.
Ваш последний пример довольно... странньІй.
QValueList<char*> codes;
...
char c[256];
codes.append(c);
stream.readRawBytes(codes(codes.count()-1), 256);
ВьІ сохраняете в
codes указатель на статический буфер. Потом читаете из потока в етот указатель, то-есть в статическую переменную
c. Почему бьІ тогда просто не записать:
char c[256];
stream.readRawBytes(c, 256);
Подозреваю, что считанньІе данньІе нужно сохранить для дальнейшей обработке, например, если
codes глобальная переменная, или вот так:
QValueList<char*> codes;
...
char c[256];
codes.append(c);
stream.readRawBytes(codes(codes.count()-1), 256);
return codes;
Только вот в Вашем варианте ничего не получится. При вьІходе из функции статическая память очистится и в списке значений
codes будут лежать указатели на мусор.
Советую делать через
QValueList<QByteArray>. Только помните, что в Qt3 в отличии от Qt4 класс
QByteArray Explicitly Shared, а не Implicitly Shared. Хотя в Вашем случае ето не имеет значения.