質問: x; } } ``` 出力結果はこうなりました。 ``` 100 200 200 ``` やはり渡された元のインスタンスのメンバに 影響を与えているようです。 このようなことを防ぐために Clone()メソッドのようなものを実装するという方法がありますが、 これは言語仕様で強制的に使わないといけないというものではないため プログラマが忘れればやはり あのようなバグの原因になるうるコードになります。 このようなことから 私はC#にコピーコンストラクタが存在していても良いと思ったのですが、 なぜ言語仕様に存在しないのでしょうか。 初心者すぎる質問ですいません... 追記 構造体のメンバにクラスを含める事自体が根本的に間違っているというか 状況としては少ないということに気づきました。
回答: クラスはnewをしたときだけインスタンスがつくられるとおぼえておけばいいと思いますよ(たぶん 値型のstructは一時的に使ったりパフォーマンスを求めたり、dllとのやりとり。 structの中にclassを持たせるのはあまり見ないですね。コードの通り、値渡しの時classは参照を渡すだけですので。 何故かというと......なんでだっけかな?^^; ただ、参考ページのやり方ですと Kitty obj = g_obj; これ、実際にKittyクラスのコンストラクタを見に行かないと何をしているかわからないんですよ。 >プログラマが忘れればやはり >あのようなバグの原因になるうるコードになります。 むしろC++のコピーコンストラクタのほうがバグの原因になりがちかもしれません。C#になれたら違和感なくかけると思われますよー