Я новичок, поэтому я, скорее всего, упустил что-то ключевое.
Я использую std::vector для хранения данных из операции ReadFile.
В настоящее время у меня есть структура READBUFF, которая содержит вектор байтов. Затем READBUFF создается через закрытый тип в классе Reader.
class Reader{
public:
void Read();
typedef struct {
std::vector<byte> buffer;
} READBUFF;
private:
READBUFF readBuffer;
}
В Read() я в настоящее время изменяю размер массива до желаемого размера, поскольку распределитель по умолчанию создает действительно большой вектор [4292060576]
void Reader::Read()
{
readBuffer.buffer.resize(8192);
}
Все это работает нормально, но потом я подумал, что лучше динамически НОВЫЙ встроенный вектор, чтобы я контролировал управление распределением указателя. Я изменил буфер на: std::vector* buffer. Когда я пытаюсь сделать следующий буфер, не устанавливается новый буфер. Из отладчика видно, что он не инициализирован.
void Reader::Read()
{
key.buffer = new std::vector<byte>(bufferSize);
}
Итак, я попытался, но это ведет себя так же, как указано выше.
void Reader::Read()
{
std::vector<byte> *pvector = new std::vector<byte>(8192);
key.buffer = pvector;
}
Главный первый вопрос: почему это не работает? Почему я не могу назначить указатель буфера допустимому указателю? Кроме того, как мне определить размер встроенного распределения по сравнению с необходимостью изменения размера?
Моя конечная цель - "обновить" буферы, а затем сохранить их в очереди. Прямо сейчас я делаю это, чтобы повторно использовать вышеуказанный буфер, но по сути я копирую буфер в другой новый буфер, когда все, что я хочу, это сохранить указатель на исходный буфер, который был создан.
std::vector<byte> newBuffer(pKey->buffer);
pKey->ptrFileReader->getBuffer()->Enqueue(newBuffer);
Заранее спасибо. Когда я публикую это, я понимаю, что упускаю что-то фундаментальное, но я в растерянности.
key.buffer = new std::vector<byte>(bufferSize);
создаст вектор размераbufferSize
и назначит указатель на негоkey.buffer
. Вы говорите, что это не так, но это так. «Основной первый вопрос», вы делаете это точно так же, как пытаетесь это сделать, любой из опубликованных вами методов будет работать. Очевидно, что-то не так с тем, как вы интерпретируете то, что видите, но я понятия не имею, что именно. Ваш код в порядке, честно. - person john   schedule 27.08.2011