C++ c++;重写运算符和此
我想重写“=”运算符,但我有一个问题,该类有一个常量成员,我想在使用“=”时更改它,我想解构该对象并构造一个新对象可能有效,但“this”不能更改。因此,您能帮我吗?您可以标记要更改的成员C++ c++;重写运算符和此,c++,C++,我想重写“=”运算符,但我有一个问题,该类有一个常量成员,我想在使用“=”时更改它,我想解构该对象并构造一个新对象可能有效,但“this”不能更改。因此,您能帮我吗?您可以标记要更改的成员mutable。这就是关键字的用途 当然,您可能违反了与类用户的隐式约定,operator=不会修改类…您可以使用pimpl习惯用法。例如: class Foo_impl { public: Foo(int x, int y, int z) :x_(x), y_(y), z_(z)
mutable
。这就是关键字的用途
当然,您可能违反了与类用户的隐式约定,
operator=
不会修改类…您可以使用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_;
};
class Foo\u impl
{
公众:
Foo(整数x,整数y,整数z)
:x_ux,y_ux,z_z
{}
常数int x_2;;
int y_uuz;
};
福班
{
公众:
Foo(整数x,整数y,整数z)
:impl_(新Foo_impl(x,y,z))
{}
Foo&运算符=(Foo-rhs)
{
掉期(rhs);
归还*这个;
}
无效掉期(Foo和rhs)
{
标准::交换(impl_uu,rhs.impl_uu);
}
//还需要复制构造函数吗
私人:
std::唯一\u ptr impl;
};
但我真的不明白这有什么意义。事实上,我只想用“=”将一个对象的const成员复制到另一个对象。我想知道如何使用解构器和构造函数来实现它。@TonyWen:您可以显式调用析构函数,然后使用placement
new
,但这并不是例外安全的。我想简单地不标记成员const不是一个选项?为什么不呢?