函数中使用容器类变量与容器类指针哪种实现方案更优?
哪种实现方案更优?
先直接给结论:方式一在你的场景下完全够用,方式二反而存在严重内存泄漏问题,更推荐用标准容器替代这两种写法。
两种写法的问题分析:
方式一(栈上C风格数组):
你担心数量超过10个会出问题,但实际上std::vector本身的对象体积极小(通常就是3个指针的大小,约24字节),哪怕定义100个这样的vector数组,占用的栈空间也才2400字节,远小于程序默认栈大小(通常1MB以上),完全不会触发栈溢出。除非你要定义几万个甚至更多,才需要考虑栈空间限制。
它的唯一局限是数组大小必须是编译期常量,无法在运行时动态调整数量。方式二(手动动态分配二级指针):
你的代码完全没有内存释放逻辑——每次调用function,都会new出一个指针数组和5个vector对象,但从未执行delete操作,这会导致严重的内存泄漏,调用次数多了会耗尽进程内存。
就算补上delete代码,手动管理二级指针内存也极易出错(比如漏释放、释放顺序错误),代码冗余还容易引入bug,完全没必要这么写。
更推荐的替代写法:
如果容器数量是固定的编译期常量,用std::array替代C风格数组,类型更安全,还能使用标准容器的成员函数:
void classA::function(){ std::array<std::vector<glm::ivec3>, 5> tmpContainer; }
如果需要运行时动态调整数量,直接用嵌套的std::vector,内存会自动管理,无需手动new/delete:
void classA::function(){ // 示例:动态创建count个vector int count = 5; std::vector<std::vector<glm::ivec3>> tmpContainer(count); }
这两种写法既规避了栈溢出风险(嵌套vector的内存都在堆上;std::array在你的场景下占用空间完全可控),又无需手动管理内存,代码简洁且安全。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

