(関連する質問が 3 つあります)
私が C++ で遭遇する最も厄介なことの 1 つは、誤ってオブジェクトを渡したりコピーしたりしてから、その状態が期待どおりではないことに疑問を抱くことです。最近、ポインタ渡しをしている状況がありましたが、期待した状態が得られず、参照渡しでポインタを渡さなければならないことが判明しました。
この状況を考えると、確認できますか:
MyClass x;
AnotherClass y;
y.passMyObjectSomewhere(x);
.
.
.
.
//Later on x is changed and I wish to see this change in y
x.modifyMyObject();
x
の更新状態を維持するために、次の手法を利用できますy
。
MyClass* x = new MyClass();
y.passMyObjectSomewhere(x);
.
.
.
delete x;
また
MyClass x;
y.passMyObjectSomewhere(&x);
また
shared_ptr<MyClass> x(new MyClass());
y.passMyObjectSomewhere(x);
1) ?の外側に変更を加えた場合、上記のすべての選択肢はオブジェクトx
内で更新され続けます。y
x
y
2) x がベクトルまたは別の STL コレクションのオブジェクトであった場合、上記は変わりますか? それとも同じルールが適用されますか?
3) コンストラクター内のポインターがデータ メンバーに割り当てられているクラスについてはどうですか。
class X{
public:
X(Something* x);
private:
Something* x;
}
X::X(Something* &y){
x = y;
}
y
そうしないと、ポインターのコピーが割り当てられるため、ここで参照によって渡す必要がありますか? 私がここで尋ねた別のSOの質問のために、私はこれを尋ねます: