C ++模板类拷贝构造函数和赋值操作符(C++ template class copy-constr

2019-09-25 16:22发布

我有一个模板类三,这是任何持三种类型的容器的实现。 我的问题是,我的类充当参数值3个常量引用,和值必须是私有的(定义),但是,我也必须实现拷贝构造函数和重载赋值运算符。

template <typename T1, typename T2, typename T3>
    class Triple
{
public:
    Triple()
    { }
    Triple(const T1 &a, const T2 &b, const T3 &c) : a(a), b(b), c(c)
    { }

    // copy constructor
    Triple(const Triple &triple) {
        a = triple.first();
        b = triple.second();
        c = triple.third();
    }

    // assignment operator
    Triple &operator=(const Triple& other) {
        //Check for self-assignment
        if (this == &other)
            return *this;

        a = other.first();
        b = other.second();
        c = other.third();

        return *this;
    }

  private:
    T1 const& a;
    T2 const& b;
    T3 const& c;
 };

你将如何实现拷贝构造函数和赋值运算符不分配为const变量?

Answer 1:

你应该没有常量引用作为成员,因为你不能(一般)知道该对象寿命将拖垮你的对象的生命周期, abc应该几乎可以肯定是类型Tx ,而不是Tx const&

如果知道这(确保你做什么,它更可能是你,除非你是一个专家C ++开发人员不理解的含义),那么你可以有使用初始化列表中的拷贝构造函数。

Triple(const Triple& other) {
  : a(other.a)
  , b(other.b)
  , c(other.c)
{ }

你不能有赋值运算符,因为分配给一个参考更改简称未对象的引用,你可以模拟引用和指针,但因为我觉得这是不是你想要的,我不会拼出来的东西。

在任何情况下,你应该做的真品使用std::tuple ,而不是另起炉灶。



文章来源: C++ template class copy-constructor and assignment-operator