Ich lese C++ Design Patterns und Derivatives Pricing von Mark Joshi und implementieren seinen Code in C++ 11. Alles ist ziemlich gut gelaufen, bis ich Kapitel 4 erlebe, in dem er virtuelle Kopierkonstruktoren diskutiert.C++ 11 virtuelle Kopie Konstruktor
PayOffDoubleDigital thePayOff(Low, Up);
VanillaOption theOption(thePayOff, Expiry);
Das Problem hierbei ist, dass VanillaOption
einen Verweis auf thePayOff
enthält. Wenn das der Fall ist und jemand thePayOff
ändert, könnte das Verhalten von theOption
unwissentlich geändert werden. Die Lösung rät er ist eine virtuelle Kopie Konstruktor in PayOffDoubleDigital
‚s Basisklasse zu erstellen, PayOff
so dass theOption
enthält seine eigene Kopie:
virtual PayOff* clone() const = 0;
und dann in jeder geerbten Klasse definiert:
PayOff* PayOffCall::clone() const
{
return new PayOffCall(*this);
}
Rückkehr new hat mich als etwas erwischt, das in C++ 11 unpassend sein könnte. Also, was ist der richtige Weg, um dies mit C++ 11 zu behandeln?
Regel von Null: Machen Sie eine Handle-Klasse mit der richtigen Besitz Semantik und nutzen Sie das überall. –
Sieht so aus, als hätte ich noch ein paar Nachforschungen angestellt. Danke Martinho. – BDig
Ich schrieb davor: http://flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html –