#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] = '\0';
}
~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运算符为char指针分配一个数组....?这是一个C ++代码.....
答案 0 :(得分:1)
运算符new
(事实上 - new[]
- 运算符)用于获取带有m_nLength元素的char数组。析构函数中的delete[]
- 运算符用于释放内存。
答案 1 :(得分:0)
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时停止。