c ++覆盖运算符和this

时间:2012-01-14 04:06:43

标签: c++

我想覆盖“=”运算符,但我有一个问题,该类有一个const成员,当我使用“=”时我想要更改,我认为解构对象并构造一个新对象可能有效但是“这个”不能改变。那么,你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以标记要更改的成员mutable。这是关键字的目的。

当然,您可能违反了对您的班级用户的隐式合同,operator=不会修改班级...

答案 1 :(得分:1)

你可以使用pimpl成语。例如:

class Foo_impl
{
public:
    Foo(int x, int y, int z)
        :x_(x), y_(y), z_(z)
    {}
    const int x_;
    int y_,z_;
};

class Foo
{
public:
    Foo(int x, int y, int z)
        :impl_(new Foo_impl(x,y,z))
    {}    

    Foo & operator=(Foo rhs)
    {
        swap(rhs);
        return *this;
    }

    void swap(Foo & rhs)
    {
        std::swap(impl_, rhs.impl_);
    }

    // still need copy constructor
private:
    std::unique_ptr<Foo_impl> impl_;
};

我真的不明白这一点。