请帮我理解这段代码
Please help me understand this code
#include<iostream>
#include<string.h>
using namespace std;
class MyString
{
private:
char *m_pchString;
int m_nLength;
public:
MyString(const char *pchString="") // explain this
{
m_nLength = strlen(pchString) + 1;
m_pchString = new char[m_nLength]; // explain this
strncpy(m_pchString, pchString, m_nLength);
m_pchString[m_nLength-1] = ' ';
}
~MyString()
{
delete[] m_pchString;
m_pchString = 0;
}
char* GetString() { return m_pchString; } // explain this
int GetLength() { return m_nLength; }
};
int main()
{
MyString cMyName("Alex");
cout << "My name is: " << cMyName.GetString() << endl;
return 0;
}
为什么在这个....中使用new操作符我理解它的大部分,但我很困惑为什么一个字符指针分配一个数组使用新的操作符....?这是一个c++代码.....
操作符new
(实际上是new[]
- operator)用于获取具有m_nLength元素的char数组。析构函数中的delete[]
操作符用于释放内存
MyString(const char *pchString="")
类MyString
的构造函数,参数[可选]类型为char*
,因此MyString str;
将有效。
m_pchString = new char[m_nLength];
m_pchString
是一个原始指针。在这个实现中,它指向garbage address
(?)(不太确定,因为在c++编译器中,指针不会初始化为NULL)。它需要在堆上分配第一个资源。如果处理不当,使用起来会很危险。
char* GetString() { return m_pchString; }
它返回m_pchString
的基址,这样您就可以访问m_pchString
指向的下一个地址,并在找到0时停止。
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 修改 VS Code 中的默认C++代码段
- 我是如何在这段代码中出现分段错误的
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 为什么这段代码不起作用,我该如何解决?
- 为什么这段代码给我错误? 有没有自错?
- 有人可以解释一下这段代码如何能够反转字符串
- 可能我知道为什么这段代码没有给出任何输出吗?
- 这段代码的最后一行在做什么?
- 我不知道为什么这段代码会让核心被转储?
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 有人可以向我解释一下这段代码的作用吗?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 为什么这段代码会导致无限循环?
- 为什么代码段会引发浮点异常?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 如何为一段代码启用 -permissive
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 为什么下面的代码段返回指针指向的值而不是指针的地址?
- 谁能告诉我为什么这段代码没有产生正确的输出?