c++ - 来自不同类型的模板类复制构造:它应该遵循五规则吗?
问题描述
我有以下课程:
template <typename T>
class A
{
public:
A(const T& value): m_value(value)
{
}
template <typename M>
A(const A<M>& other): A(T(other.m_value))
{
}
private:
T m_value;
};
这个班级应该遵循五法则吗?还是template <typename T>template <typename M>
A<T>::A(const A<M>& other)
不被视为复制构造函数?
解决方案
存在五法则是因为如果你有一个复制构造函数,那可能是因为你不能使用自动生成的构造函数,而这又可能是因为你有一些需要注意的间接性。在这种情况下,您通常还需要在分配和销毁期间处理它。
你所拥有的不是复制构造函数。它从另一种类型转换而来。您的代码中没有迹象表明该成员m_value
在分配或销毁期间需要特殊处理。此外,您拥有的复制构造函数不执行任何特殊操作。
如果您能想到一些需要放入上述特殊成员函数的代码,请继续执行。否则,您不需要它们。
一般规则可能很有用,但您最终仍然需要根据思考做出设计决策!您不会仅仅因为经验法则说您可能需要实现功能。
推荐阅读
- r - 使用 dplyr 包计算 R 中的组合标准偏差时出错
- c# - NLog 同一类中的多个记录器
- jenkins - Jenkins显示自定义参数值名称
- html - 如何从输入类型号和数据库(获取)值中减去一个值?减法后,更新查询时更新当前余额
- binary - 在 java 中使用 BinaryDecoder 读取 avro 文件时出现 ArrayIndexOutOfBoundsException
- html - 源类型,如果您不知道它是 jpeg 还是 gif
- email - 为什么大多数邮件服务不允许某些类型的文件,如附件中的 .exe?
- python - 为什么 CSS 不工作并且图像没有显示在我的 django 应用程序中
- mongodb - 需要从 mongodb 查询将数据一种格式转换为另一种格式
- javascript - JavaScript Objects is not recognised by it's property