在Modern C++ Design: Generic Programming and Design Patterns Applied
Andrei Alexandrescu 中,提倡保护策略的析构函数:
因为析构函数是受保护的,只有派生类才能销毁策略对象,所以外人不可能对指向策略类的指针应用 delete。然而,析构函数不是虚拟的,因此没有大小或速度开销
但后来,他写了以下关于政策兼容性的段落:
如您所见,您在实施策略之间的转换方面具有双向灵活性。您可以在左侧实现转换构造函数,也可以在右侧实现转换运算符。
假设我们有 2 个策略:
class First{
public:
First() = default;
First(const First&) = default;
protected:
~First() = default;
};
class Second{
public:
explicit operator First() const {
return //what???
}
Second() = default;
Second(const Second&) = default;
Second(const First& ) {};
protected:
~Second() = default;
};
如何在不构造 First 类型的临时对象的情况下创建从策略 Second 到 Policy First 的转换运算符?