-5

メモリ割り当てに関して、コードのこれら 3 つの部分に問題があります。まだ手に入れていません。

私が間違っていることと、それを修正する方法を教えてください。

1:

class MyString {
public:
    MyString()  : str(0) {}
    MyString( char *a ) 
    { str = new char[strlen(a)+1]; strcpy(str,a); }
    ~MyString() { delete[] str; }
private:
    char *str;
    friend ostream& operator<<(ostream &os, const MyString &str);
};

ostream& operator<<(ostream &os, const MyString &s)
{
    return os  << s.str  << endl;
}

int main()
{
    MyString str("Mitt namn");
    MyString *strp = &str;
    // alot of code
    delete strp;
    // alot of code
}

2: 上記のように定義

int main()
{
    MyString *str1 = new MyString("Mitt namn");
    MyString str2  = *str1;
    delete str1;
    // alot of code
    cout << str2 << endl;
}

3: 上記の定義のまま

class MyASCII : public MyString {
public:
    MyASCII( char *a) : MyString(a), ascii(0)
    { 
        if (a==0) return;
        ascii = new int[strlen(a)];
        for (int i=0; i<strlen(a); i++)
            ascii[i] = int(a[i]);
    }
    ~MyASCII() { delete[] ascii; }
private:
    int *ascii;
};
4

2 に答える 2

4

まず、使用するだけstd::stringです。第二に、ルール・オブ・スリー違反。第三に、あなたdeleteは 1 のローカル変数ですがmain、これは間違っています。

于 2013-05-25T10:27:32.083 に答える