0

在数组存储类中声明,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;
}

================================= ArrayStorage.cpp=============== ================

我的第一个问题是,如果我将名称声明为私有,那么整个事情就不起作用了。如果我将其公开,它会起作用。

string *names其次,您能否建议,如果我想声明为私有,我该如何使其工作?

4

1 回答 1

1

使用 RAII 感知类,例如std::vector<std::string>并删除赋值运算符。

此外,您可能想阅读三定律(如果您有析构函数、复制赋值运算符、复制构造函数中的任何一个;那么您应该拥有所有这些)。

(编辑:修正法律名称)

于 2012-05-06T01:24:28.813 回答