繁体   English   中英

具有可变长度项的向量的C ++内存管理

[英]C++ memory management for a vector with variable length items

采用可变长度的结构(如果这是一个真实的程序,则使用int数组会更好):

#include <vector>
struct list_of_numbers(){
  int length;
  int *numbers; //length elements.
};
typedef std::vector<list_of_numbers> list_nums; //just a writing shortcut

(...)

然后建立一个向量:

list_nums lst(10); //make 10 lists.
lst[0].length = 7; //make the first one 7 long.
lst[0].X = new int[7]; //allocate it with new[]

(...)

以上适用于ubuntu中的g ++。 需要new()调用来避免段错误。 是否可以在不再需要时立即删除第一个向量,否则新调用会导致内存泄漏? 手动删除用new()调用的所有部分会很麻烦。

在C ++中,执行此操作的典型方法是为负责内存管理的list_of_numbers结构定义构造函数和析构函数以及赋值运算符,或者(更好)为numbers字段使用std::vector<int>摆脱length字段。

但是,如果这样做,则最好完全删除该结构,然后执行以下操作:

#include <vector>
typedef std::vector<int> list_ints;
typedef std::vector<int_ints> list_lists;

(...)

list_lists lst(10); // make 10 lists.
lst[0].resize(7);   // set length of the zeroth list to 7

为什么不只使用int向量呢? 这就是工作。 您不应在专门的课程之外打电话给new。

通常,您需要将清除代码放入对象的析构函数中( ~list_of_numbers() ),并将内存创建代码放入构造函数中( list_of_numbers() )。 这样,在调用析构函数(或创建对象)时便会为您处理这些事情。

暂无
暂无

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

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