-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の型を持つ [optional] パラメーターを持つクラスのコンストラクターが有効になります。char*MyString str;

m_pchString = new char[m_nLength];

m_pchString生のポインタです。この実装では、garbage address(?) を指しています (C++ コンパイラではポインタが NULL に初期化されないため、よくわかりません)。最初のリソースをヒープに割り当てる必要があります。また、取り扱いを誤ると危険です。

char* GetString() { return m_pchString; }

のベースアドレスを返すので、次のアドレスが指すm_pchStringアドレスにアクセスでき、 0 を見つけると停止します。m_pchString

于 2013-06-19T12:16:40.700 に答える