我正在使用一个写得不好并且有很多内存泄漏的代码库。
它使用了很多包含原始指针的结构,主要用作动态数组。
尽管结构通常在函数之间传递,但这些指针的分配和释放是随机放置的,不容易跟踪/推理/理解。
我将其中一些更改为类,并且这些指针将由类本身进行 RAIIed。它们运行良好并且看起来并不难看,只是我禁止复制构造和复制分配这些类只是因为我不想花时间实现它们。
现在我在想,我是在重新发明轮子吗?为什么不用 std:array 或 std::valarray 替换 C 样式的数组?
我更喜欢 std::valarray 因为它使用堆内存和 RAIIed。并且 std::array 在我的开发环境中(还)不可用。
Edit1:std::array 的另一个优点是这些动态数组中的大多数是 POD(主要是 int16_t、int32_t 和 float)数组,并且数字 API 可以使生活更轻松。
在开始之前,我有什么需要注意的吗?
我能想到的一个可能是没有一种简单的方法可以将 std::valarray 或 std::array 转换回 C 样式数组,并且我们的部分代码确实使用了指针算法并且需要将数据呈现为纯 C样式数组。
还要别的吗?
编辑 2
我最近遇到了这个问题。一个非常糟糕的事情std::valarray
是它在 C++11 之前不能安全地复制分配。
正如该答案中所引用的,在 C++03 及更早版本中,如果源和目标的大小不同,则为 UB。