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

标签 c++ arrays pointers

我正在修改我发现在 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/

相关文章:

c++ - 计算二分搜索的运行时间

c++ - 相当于C++中的Lua "and/or"?

c - 为什么,当我将 char[] 转换为 int 时,是否会得到按字节反转

ios - 数组只是不断添加对象和内存崩溃

c++ - 将对象地址转换为字符指针,然后对它们使用指针数学

c - C程序中的非法初始化

java - 无法从 Java 服务器使用 boost C++ 客户端读取

c++ - 从 C++ mysql 连接器选择将 longblob 写入文件

c++ - 读取任意大小的任意数组

java - 使用 onItemClickListener 的数组位置