-9
    #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 运算符....我了解其中的大部分内容,但我很困惑为什么使用 new 运算符为 char 指针分配一个数组....?这是一个C++代码......

4

2 回答 2

1

运算符new(实际上是new[]-Operator)用于获取具有 m_nLength 元素的 char 数组。析构函数中的delete[]-Operator 用于释放内存。

于 2013-06-19T11:58:20.933 回答
0
MyString(const char *pchString="") 

具有soMyString类型的 [可选] 参数的类的构造函数将是有效的。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 时停止。

于 2013-06-19T12:16:40.700 回答