a = b; であるため、C++ の外観で回避することはできません。C# とは別のセマンティクスが C++ にあります。C# では、a = b; a は b と同じオブジェクトを指します。C++ では、a = b は a の内容を変更します。どちらにも浮き沈みがあります。それはあなたのようです
MyType * a = new MyType();
MyType * b = new MyType();
a = b; /* only exchange pointers. will not change any content */
C++ の場合 (最初のオブジェクトへの参照が失われ、メモリ リークが発生します。ただし、ここでは無視します)。そのために、C++ で代入演算子をオーバーロードすることもできません。
回避策は簡単です:
MyType a = new MyType();
MyType b = new MyType();
// instead of a = b
a.Assign(b);
免責事項: 私は C# 開発者ではありません
このような書き込み専用プロパティを作成できます。次に a.Self = b; を実行します。その上。
public MyType Self {
set {
/* copy content of value to this */
this.Assign(value);
}
}
さて、これは良くありません。それは最小驚きの原則(POLS)に違反しているためです。a.Self = b; を実行しても a が変化するとは思わないでしょう。