c ++:我应该在什么时候开始使用"new char [N]"vs静态缓冲区"char [Nmax]"

1 c++

我的问题是关于C++

假设我编写了一个函数来将一个项目列表返回给调用者.每个项目都有2个逻辑字段:1)一个int ID,以及2)一些数据可能会有所不同的数据,比如从4个字节到16个字节.所以我的问题是是否使用如下数据结构:

struct item {
  int  field1;
  char field2[MAX_LEN];

或者更确切地说,从堆中分配field2,并要求调用者在完成时销毁:

struct item{
  int  field1;
  char *field2;  // new char[N] -- destroy[] when done!

由于字段#2的最大大小很大,因此可以从堆中分配,对吗?所以一旦我知道N的大小,我就调用field2 = new char [N],然后填充它.

现在,这非常低效吗?

在N总是很小的情况下是否更糟,即假设我有10000个N = 4的项目?

Jam*_*lis 11

您应该使用其中一个标准库容器,例如std::stringstd::vector<char>; 那么你不必担心自己管理内存.

  • 真相.但是记住`std :: vector`动态分配内存也很有用.有时,在一些罕见的紧张情况下,这可能是一个问题.然后你可以使用`boost :: array`,它是原始数组的一个方便的包装器,同样便宜. (3认同)