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

标签 c++

我的问题是关于C++的

假设我编写了一个函数来将项目列表返回给调用者。每个项目都有 2 个逻辑字段:1) 一个 int ID,和 2) 一些大小可能不同的数据,比方说从 4 字节到 16Kbytes。所以我的问题是是否使用像这样的数据结构:

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 的项目?

最佳答案

您应该改为使用标准库容器之一,例如 std::stringstd::vector<char> ;那么您就不必担心自己管理内存。

关于c++:我应该在什么时候开始使用 "new char[N]"与静态缓冲区 "char[Nmax]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932954/

相关文章:

c++ - 声明后在数组中分配多个值

C++ vector 在递归函数中丢失数据

c++ - 使用函数更改 std::string 的内容

C++ 在全局命名空间中找不到非标准 C 函数

c++ - 使用 ofstream 将整数作为十六进制写入文件

c++ - 带有 qrc 的 qml 层次结构

c++ - 在 C++ 中以递归方式简单地打印 vector 的 STL vector

c++ - Boost Beast,如何提供登录凭据

C++: std::remquo 没有给出预期的输出

c++ - 为什么我不能访问我的静态函数中的私有(private)构造函数,如下所示?