Tôi đang đọc C++ Design Patterns và Derivatives Pricing của Mark Joshi và triển khai mã của mình trong C++ 11. Mọi thứ đã diễn ra khá tốt cho đến khi tôi nhấn chương 4, nơi anh ta thảo luận về các nhà xây dựng bản sao ảo.C++ 11 constructor ảo sao chép
PayOffDoubleDigital thePayOff(Low, Up);
VanillaOption theOption(thePayOff, Expiry);
Vấn đề ở đây là VanillaOption
chứa tham chiếu đến thePayOff
. Nếu đó là trường hợp và ai đó sửa đổi thePayOff
, hành vi của theOption
có thể được sửa đổi vô tình. Giải pháp ông khuyên là để tạo ra một constructor sao chép ảo trong lớp cơ sở PayOffDoubleDigital
's, PayOff
để theOption
chứa bản sao riêng của nó:
virtual PayOff* clone() const = 0;
và sau đó được xác định trong mỗi lớp được thừa kế:
PayOff* PayOffCall::clone() const
{
return new PayOffCall(*this);
}
Trở mới bắt tôi như một cái gì đó có thể không phù hợp trong C++ 11. Vì vậy, cách thích hợp để xử lý này bằng cách sử dụng C++ 11 là gì?
Quy tắc 0: tạo một lớp xử lý với ngữ nghĩa quyền sở hữu thích hợp và sử dụng ở mọi nơi. –
Có vẻ như tôi có một số nghiên cứu bổ sung. Cảm ơn Martinho. – BDig
Tôi đã viết về nó trước đây: http://flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html –