我是新人,所以我很可能错过了一些关键.
我正在使用std :: vector来存储来自ReadFile操作的数据.
目前我有一个名为READBUFF的结构,它包含一个byte向量.然后,READBUFF通过名为Reader的类中的私有类型进行实例化.
class Reader{
public:
void Read();
typedef struct {
std::vector<byte> buffer;
} READBUFF;
private:
READBUFF readBuffer;
}
Run Code Online (Sandbox Code Playgroud)
在Read()中,我当前将数组的大小调整为我想要的大小,因为默认分配器创建了一个非常大的向量[4292060576]
void Reader::Read()
{
readBuffer.buffer.resize(8192);
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但后来我想我宁愿动态新建矢量内联,所以我控制指针的分配管理.我将缓冲区更改为:std :: vector*buffer.当我尝试执行以下操作时,未将缓冲区设置为新缓冲区.从调试器中可以清楚地看出它没有被初始化.
void Reader::Read()
{
key.buffer = new std::vector<byte>(bufferSize);
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试了,但这与上面的行为相同.
void Reader::Read()
{
std::vector<byte> *pvector = new std::vector<byte>(8192);
key.buffer = pvector;
}
Run Code Online (Sandbox Code Playgroud)
主要的第一个问题是为什么这不起作用?为什么我不能将缓冲区指针分配给有效指针?另外,我如何定义内联分配的大小与必须调整大小?
我的最终目标是"新建"缓冲区,然后将它们存储在双端队列中.现在我这样做是为了重用上面的缓冲区,但我本质上是将缓冲区复制到另一个新的缓冲区,当我想要的是存储一个指向创建的原始缓冲区的指针.
std::vector<byte> newBuffer(pKey->buffer);
pKey->ptrFileReader->getBuffer()->Enqueue(newBuffer);
Run Code Online (Sandbox Code Playgroud)
提前致谢.我发现,当我发布这篇文章时,我错过了一些基本但我不知所措.