gpt4 book ai didi

c++ - 分配数组指针 C++ 等效代码

转载 作者:行者123 更新时间:2023-11-28 08:10:58 27 4
gpt4 key购买 nike

我正在修改我发现在 C++ 对象中的一些代码。消息是一个 C++ 类。

原始代码行如下所示:

unsigned char fifoQueue[256 * sizeof(Message)] = {0};

因为我将它放入一个对象中,所以我这样做:

///in header
unsigned char fifoQueue;

///in object initializer
fifoQueue = new unsigned char[256 * sizeof(Message)];

不知何故,我认为这是不正确的。获得相同结果的正确实现是什么?我对它的工作原理有点不清楚——在给定的例子中,fifoQueue 是一个指向内存位置的指针,对吗?我的对象是否应该将 fifoQueue 实例变量作为指向“消息”数组的指针?

谢谢!

///////好吧,我在这里添加一些与它的使用方式相关的信息。很抱歉之前没有包括这个。

有一种方法可以将此值作为指针访问并根据读/写位置递增它。所以我需要新的初始化器,这样这个方法才能正常工作。

Message* Fifo::getMessageToWrite(){

Message* base = (Message*)fifoQueue;
return new(base + (fifoWritePtr & 255)) Message();

}

最佳答案

从表面上看,您想要传递 Message 类型的对象通过队列。为此,正确的 C++ 机制是使用 std::queue<Message> : 将新消息插入队列时,它会增长到合适的大小。不同于 std::vector<T>在其他答案中提出,这实际上使用了 std::deque<Message>在引擎盖下(您可以直接使用 std::deque<Message>,但如果您想要一个队列,只需使用一个队列)。

使用 std::queue<Message> 的优势是这个队列中的对象保持不变,而它们在 std::vector<Message> 中不断被洗牌: 而 std::vector<T>仅支持后面的高效(即 O(1))添加/删除,例如用于堆栈 (LIFO),std::deque<T>支持在两端进行有效的添加/删除,这是队列 (FIFO) 所需要的。我认为添加/删除到 std::deque<T> 的复杂性只是摊销常数,但这仍然比使用 std::vector<T> 得到的线性复杂度要好将其用作 FIFO 时。

关于c++ - 分配数组指针 C++ 等效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9086518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com