在this set of slides中,作者强烈建议避免使用C ++程序中的指针。特别是在幻灯片6中,建议使用向量而不是动态数组。虽然我相信矢量使用起来更安全,例如它们在异常发生时避免内存泄漏,但它们有额外的内存开销。 This post表示向量最多可以消耗向量中现有元素的两倍。不幸的是,这个功能导致我的程序在我的系统中以有限的可用内存量中止。
是否存在类似于动态数组的C ++容器,在运行时获取固定(或很少变化)的元素数量,并提供与容器相同的安全性?我能找到的最接近的东西(here)是array
,它需要template
中提供的编译时指定大小。
答案 0 :(得分:4)
您可以使用std::unique_ptr
:
std::unique_ptr<int[]> arr(new int[5]);
这将为您安全地管理内存。
答案 1 :(得分:4)
如果您知道固定大小,只需在reserve(n)
上调用vector
即可。虽然不能保证不使用更多空间,但我不知道任何实现不仅仅为该数量的元素分配空间(当然,假设它大于当前capacity()
)