我正在阅读Mark Joshi的《C++设计模式和衍生品定价》,并在C++11中实现他的代码。一切进行得非常顺利,直到我遇到第四章讨论虚拟复制构造函数。
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);
}
在C++11中,直接返回new似乎是不合适的做法。那么使用C++11,应该如何处理呢?