我正在阅读 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 处理这个问题的正确方法是什么?