0

arraystorage クラスで宣言され、private: string *names;

ArrayStorage& ArrayStorage::operator=(const ArrayStorage& rhs)
{           
    // possible error
    names = new string[numOfElements];

    return *this;
}

//      copy constructor
ArrayStorage::ArrayStorage(const ArrayStorage& rhs):
                                 names(new string[numOfElements]),                                                      

                                 numOfElements(rhs.numOfElements)
{
    //names = new string[this->getNumOfElements()];

    for (int i = 0; i < this->getNumOfElements(); i++)
        names[i] = rhs.names[i];

}

ArrayStorage::~ArrayStorage(void)
{
    delete [] names;
}

================================ アレイストレージ.cpp============== ===============

私の最初の問題は、名前を非公開として宣言すると、すべてが機能しなくなります。公開するとうまくいきます。

string *names次に、非公開として宣言したい場合、どうすれば機能させることができるか教えてください。

4

1 に答える 1

1

のような RAII 対応クラスを使用しstd::vector<std::string>、代入演算子を削除します。

さらに、3 つの法則を読みたいと思うかもしれません (デストラクタ、コピー代入演算子、コピー コンストラクタのいずれかがある場合は、それらすべてを持っている必要があります)。

(編集: 法律名を修正)

于 2012-05-06T01:24:28.813 に答える