Mark Joshi による C++ Design Patterns and Derivatives Pricing を読み、彼のコードを C++11 で実装しています。仮想コピー コンストラクターについて説明する第 4 章に到達するまで、すべてが順調に進んでいました。
PayOffDoubleDigital thePayOff(Low, Up);
VanillaOption theOption(thePayOff, Expiry);
ここでの問題VanillaOption
は、 への参照が含まれていることthePayOff
です。その場合、誰かが を変更するthePayOff
と、 の動作がtheOption
無意識のうちに変更される可能性があります。彼がアドバイスする解決策は、PayOffDoubleDigital
の基本クラスに仮想コピー コンストラクターを作成PayOff
しtheOption
て、独自のコピーを含めることです。
virtual PayOff* clone() const = 0;
次に、継承された各クラスで定義されます。
PayOff* PayOffCall::clone() const
{
return new PayOffCall(*this);
}
new を返すことは、C++11 では不適切である可能性があることに気付きました。では、C++11 を使用してこれを処理する適切な方法は何ですか?