"="演算子をオーバーライドしたいのですが、問題があります。クラスには "="を使用するときに変更したい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. 演算子( - - )()演算子C#
- 4. 等価演算子のオーバーライド
- 5. Rubyのオーバーライド==演算子
- 6. C++と++演算子
- 7. Cでのラムダ計算:ブール演算子とNOT演算子
- 8. C++演算子()括弧 - 演算子Type()vs型演算子()
- 9. C++演算子+演算子+ =オーバーロード
- 10. C++:演算子オーバーロード、演算子+
- 11. <<演算子とC++の文字列のオーバーロード+演算子
- 12. C#の演算子の演算順序
- 13. Cプログラミング!算術演算子演算
- 14. C++の演算子( '+'、 '+ =')
- 15. C++、ポインタと演算子
- 16. C++/CLIファイナライザと演算子
- 17. C++テンプレートとオーバーロード演算子
- 18. 増分と減算の演算子C#
- 19. NHibernateのオーバーライド==(等号)演算子?
- 20. テンプレートサブクラスの演算子オーバーライド問題==
- 21. オーバーライド<<コンポジションオブジェクトの演算子でエラーが発生するC++
- 22. この仮想演算子をC++でオーバーライドする方法は?
- 23. 演算子は= C++
- 24. Cプログラミング - 演算子
- 25. C++オーバーロード演算子++
- 26. C++カンマ演算子
- 27. C#coalesce演算子
- 28. XOR演算子とstd :: ostream演算子
- 29. Xval演算子と比較演算子?
- 30. 共有ポインタ[]演算子と++演算子
メンバーconstにラベルを付けるだけでは、オプションではないと思いますか?何故なの? –