独自のメンバーの1つへのポインターを含む単純なクラスがあります。
struct X {
int val;
int* pVal;
X(int v) : val(v), pVal(&val) {}
}
X x(1);
私はこのようなコードを持っています:
void foo() {
doStuffWith(x);
x = X(2); // completely discard the old value of X, and start again
doStuffWith(x);
}
xが再割り当てされたときに、戻り値の最適化が行われない場合x.pVal
、一時のメンバーを無効に指すのではないかと心配しています。X(2)
これを修正するためのコピーコンストラクターを作成できることに気付きました。ただし、最初にメモリ内の適切な場所にオブジェクトを作成するのではなく、最初にコピーを実行するのは無駄に思えます。
ここで配置の新しい演算子を使用するのは合理的ですか?それとも、これはデストラクタに意図しない結果をもたらしますか?
void foo() {
doStuffWith(x);
new (&x) X(2); // completely discard the old value of X, and start again
doStuffWith(x);
}