C++按需创作

C++ On Demand Creation

本文关键字:C++      更新时间:2023-10-16

我正在读一本书,书中出现了以下代码。

TTextInBuffer::TTextInBuffer(const char *pInputFileName, TAbortCode ac)
: pFileName(new char[strlen(pInputFileName) + 1])

pFileName被声明为const字符,所以我假设第二行在pFileName中创建了一个新的字符。我只是想知道具体发生了什么。谢谢

当调用此构造函数时,将执行此处的初始值设定项列表:

: pFileName(new char[strlen(pInputFileName) + 1])

strlen()调用根据其内容查找pInputFileName字符串的长度。它基本上将其作为一个char数组进行遍历,直到找到一个NULL,然后返回结果。这样做是为了计算pFileName内的新字符串所需的空间。

+ 1是为了确保结尾处有多余的NULL终止字符的空间。

最后,使用关键字new将该表达式中弹出的任何数字输入到内存分配调用中。这将在字符串数据将结束的堆上动态分配内存。new调用返回分配内存的地址,并将其传递给pFileName指针变量,使其指向该变量。

因此,总结一下:

  1. 计算pInputFileName的长度
  2. 计算的长度增加1以满足副本中的NULL
  3. 调用new为副本请求空间
  4. new返回的地址分配给pFileName

代码中缺少的一件事是将输入字符串的内容实际复制到目的地,但这可能发生在构造函数体中(在{}字符之间)。

第二行通过调用运算符new[]来分配内存区域(chars的数组)。

new的参数是要分配的数组的大小。因此,在这个片段中,长度被设置为字符串pInputFileName+1的长度。该+ 1用于拟合C和C++中使用的空字符,以确定字符串的结束位置。

相关文章:
  • 没有找到相关文章