6

Mark Joshi による C++ Design Patterns and Derivatives Pricing を読み、彼のコードを C++11 で実装しています。仮想コピー コンストラクターについて説明する第 4 章に到達するまで、すべてが順調に進んでいました。

PayOffDoubleDigital thePayOff(Low, Up);
VanillaOption theOption(thePayOff, Expiry);

ここでの問題VanillaOptionは、 への参照が含まれていることthePayOffです。その場合、誰かが を変更するthePayOffと、 の動作がtheOption無意識のうちに変更される可能性があります。彼がアドバイスする解決策は、PayOffDoubleDigitalの基本クラスに仮想コピー コンストラクターを作成PayOfftheOptionて、独自のコピーを含めることです。

virtual PayOff* clone() const = 0;

次に、継承された各クラスで定義されます。

PayOff* PayOffCall::clone() const
{
    return new PayOffCall(*this);
}

new を返すことは、C++11 では不適切である可能性があることに気付きました。では、C++11 を使用してこれを処理する適切な方法は何ですか?

4

2 に答える 2