我想覆盖“=”运算符,但我有一个问题,该类有一个const成员,当我使用“=”时我想要更改,我认为解构对象并构造一个新对象可能有效但是“这个”不能改变。那么,你能帮助我吗?
答案 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_;
};
我真的不明白这一点。