我正在阅读 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);
}
Returning new 让我觉得在 C++11 中可能不合适。那么使用 C++11 处理这个问题的正确方法是什么?