首页 > 解决方案 > 来自不同类型的模板类复制构造:它应该遵循五规则吗?

问题描述

我有以下课程:

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)不被视为复制构造函数?

标签: c++templatesconstructorcopy-constructor

解决方案


存在五法则是因为如果你有一个复制构造函数,那可能是因为你不能使用自动生成的构造函数,而这又可能是因为你有一些需要注意的间接性。在这种情况下,您通常还需要在分配和销毁期间处理它。

你所拥有的不是复制构造函数。它从另一种类型转换而来。您的代码中没有迹象表明该成员m_value在分配或销毁期间需要特殊处理。此外,您拥有的复制构造函数执行任何特殊操作。

如果您能想到一些需要放入上述特殊成员函数的代码,请继续执行。否则,您不需要它们。

一般规则可能很有用,但您最终仍然需要根据思考做出设计决策!您不会仅仅因为经验法则说您可能需要实现功能。


推荐阅读