繁体   English   中英

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

[英]allocating array pointer c++ equivalent code

我正在修改一些发现在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时得到的线性复杂度更好。

第二个版本声明一个unsigned char并尝试为其分配一个unsigned char* 这将无法正常工作,即使如此,我也不知道为什么您要为256个intS分配足够的空间,然后将它们分配给一个unsigned char*除非您执行的级别很低。 无论如何, std::vector可能是更好的选择。

小菜一碟: std :: vector比手动动态内存分配(普通指针)更可取。

#include <vector>
...
std::vector<char> fifoQueue(256);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM