重载=运算符时,应该使一个对象的内容等于另一对象的内容,还是使该对象的指针指向同一对象?

重新阅读该问题,似乎应该复制内容而不是指针。但我只是想不通,因此,如果有人能解释我应该做什么,我知道如何做到这两者,我不确定,我不确定该选择哪个。

class IntObject
{
private:
    int *pi_One;

public:

    IntObject(void);

    IntObject::IntObject(int const &i_one);

    ~IntObject(void);

    IntObject & operator=(const IntObject&);

};

IntObject::IntObject()
{
    pi_One = new int(0);
}

IntObject::IntObject(int const &i_one)
{
    pi_One = new int(i_one);
}

IntObject::~IntObject(void)
{
    delete pi_One;
}

IntObject & IntObject::operator=(const IntObject& c) {
//This copies the pointer to the ints
    this->pi_One = c.pi_One;

    return *this;
}

最佳答案

这取决于您要在类型中包含的语义。如果要使用值语义,则复制内容(如std::vector中那样进行深拷贝),如果要使用参考语义(如std::shared_ptr中那样进行浅拷贝)

关于c++ - C++重载=运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11763554/

10-08 20:36