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
指针变量,使其指向该变量。
因此,总结一下:
- 计算
pInputFileName
的长度 - 计算的长度增加1以满足副本中的NULL
- 调用
new
为副本请求空间 new
返回的地址分配给pFileName
代码中缺少的一件事是将输入字符串的内容实际复制到目的地,但这可能发生在构造函数体中(在{
和}
字符之间)。
第二行通过调用运算符new[]
来分配内存区域(char
s的数组)。
new
的参数是要分配的数组的大小。因此,在这个片段中,长度被设置为字符串pInputFileName
+1的长度。该+ 1
用于拟合C和C++中使用的空字符,以确定字符串的结束位置。
相关文章:
- 没有找到相关文章