"="演算子をオーバーライドしたいのですが、問題があります。クラスには "="を使用するときに変更したいconstメンバーがあります。オブジェクトを分解して新しいオブジェクトが働くかもしれませんが、 "これ"は変更することはできません。そう、あなたは私を助けますか?C++のオーバーライド演算子とthis
答えて
変更したい会員にはmutable
と印を付けることができます。これがキーワードの目的です。もちろん
、あなたはあなたがPIMPLイディオムを使用することができます... operator=
クラスを変更しないことを、あなたのクラスのユーザーに
実際には、オブジェクトのconstメンバーを別のメンバーにコピーするために "="を使用したいだけです。デコンストラクタとコンストラクタを使用してそれを作成する方法を知りたいと思います。 – TonyWen
@ TonyWen:明示的にデストラクタを呼び出してから、配置 'new'を使用することはできますが、それは例外セーフではありません。 –
@BenVoigt:リスクフリーは楽しいものではありません... –
を暗黙の契約を破ることができます。例:
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_;
};
私は本当にこの点を見ません。
- 1. C++演算子のオーバーライド
- 2. Java - 'this'演算子
- 3. 等価演算子のオーバーライド
- 4. Rubyのオーバーライド==演算子
- 5. C++:演算子オーバーロード、演算子+
- 6. C++演算子+演算子+ =オーバーロード
- 7. C#の演算子の演算順序
- 8. C++/CLIファイナライザと演算子
- 9. C++テンプレートとオーバーロード演算子
- 10. NHibernateのオーバーライド==(等号)演算子?
- 11. 演算子は= C++
- 12. Xval演算子と比較演算子?
- 13. この仮想演算子をC++でオーバーライドする方法は?
- 14. 演算子if演算子
- 15. 代入演算子(=)をオーバーライドするC#模倣
- 16. C++の演算子のオーバーロード
- 17. Cのtypeof演算子
- 18. C++の変換演算子
- 19. C++オーバーロード:[] []演算子のオーバーロード
- 20. C#のオーバーロード演算子==クラス
- 21. のVisual C++演算子+ =は
- 22. cのモジュラス演算子
- 23. C:++で演算子のオーバーロード「:=」
- 24. C#の三項演算子
- 25. C#演算子の問題
- 26. Cの右シフト演算子?
- 27. C++クラスの演算子
- 28. C++の変換演算子
- 29. C++マップの演算子オーバーロード
- 30. 演算子のオーバーロード== C++
メンバーconstにラベルを付けるだけでは、オプションではないと思いますか?何故なの? –