Czytam wzory wzorów C++ i instrumentów pochodnych przez Marka Joshi i implementuję jego kod w C++ 11. Wszystko poszło całkiem nieźle, aż dotarłem do rozdziału 4, gdzie omawia konstruktorów kopii wirtualnych.Konstruktor wirtualnych kopii C++ 11
PayOffDoubleDigital thePayOff(Low, Up);
VanillaOption theOption(thePayOff, Expiry);
Problem polega na tym, że VanillaOption
zawiera odniesienie do thePayOff
. Jeśli tak jest i ktoś modyfikuje thePayOff
, zachowanie theOption
może zostać zmodyfikowane nieświadomie. Rozwiązanie radzi jest utworzenie konstruktora wirtualnego kopiowania w klasie bazowej PayOffDoubleDigital
„s, PayOff
tak że theOption
zawiera własną kopię:
virtual PayOff* clone() const = 0;
a następnie zdefiniowane w każdej dziedziczonej klasy:
PayOff* PayOffCall::clone() const
{
return new PayOffCall(*this);
}
Skrutacyjnej new złapał mnie jako coś, co może być nieodpowiednie w C++ 11. Jaki jest więc właściwy sposób obsługi tego przy użyciu C++ 11?
Reguła zerowa: należy utworzyć klasę obsługi z odpowiednią semantyką własności i używać jej wszędzie. –
Wygląda na to, że mam dodatkowe badania. Dziękuję Martinho. – BDig
Pisałem o tym wcześniej: http://flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html –