C++重载运算符和这
我想覆盖“=”运算符,但我有一个问题,类有一个const成员,我想改变,当我使用“=”,我认为解构对象,并构造一个新的对象可能会工作,但“这个”不能改变。所以,你会帮助我吗?C++重载运算符和这
您可能会标记要更改的成员mutable
。这是关键字的用途。
当然,你也可以在隐性契约破坏你的类的用户认为operator=
不会修改类...
事实上,我只是想用“=”将对象的const成员复制到另一个对象。我想知道如何使用解构器和构造器来创建它。 – TonyWen 2012-01-14 04:19:14
@TonyWen:你可以明确地调用析构函数,然后使用放置'new',但那不会是异常安全的。 – 2012-01-14 04:49:04
@BenVoigt:无风险并不好玩...... – 2012-01-14 04:54:55
你可以使用平普尔成语。例如:
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_;
};
我真的没有看到这点。
我想简单地不标注成员const不是一个选项?为什么不? – 2012-01-14 04:23:40