C++模板类复制构造函数和赋值算子
我有一个模板类Triple的实现,它是一个包含任意三种类型的容器。我的问题是,我的类将对值的三个常量引用作为参数,并且这些值必须是私有定义,然而,我还必须实现复制构造函数和重载赋值运算符C++模板类复制构造函数和赋值算子,c++,class,templates,C++,Class,Templates,我有一个模板类Triple的实现,它是一个包含任意三种类型的容器。我的问题是,我的类将对值的三个常量引用作为参数,并且这些值必须是私有定义,然而,我还必须实现复制构造函数和重载赋值运算符 template <typename T1, typename T2, typename T3> class Triple { public: Triple() { } Triple(const T1 &a, const T2 &b, const T3
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;
};
您如何在不分配常量变量的情况下实现复制构造函数和赋值运算符?您可能不应该将常量引用作为成员,因为您一般不知道对象的生存期将超过对象的生存期,a、b和c几乎肯定是Tx类型,而不是Tx const&
如果你确实知道这是你所做的,那么你可能更不了解这个含义,除非你是一个专家C++开发者,那么你可以使用一个初始化列表来复制复制构造函数。
Triple(const Triple& other) {
: a(other.a)
, b(other.b)
, c(other.c)
{ }
你不能有赋值运算符,因为赋值给引用会改变引用的对象,而不是引用,你可以用指针模拟引用,但因为我认为这不是你想要的,所以我不会详细说明
无论如何,您真正应该做的事情是使用std::tuple,而不是重新发明轮子。您可能不应该将const引用作为成员,因为您一般不知道对象的生存期将超过对象的生存期,a、b和c几乎肯定应该是Tx类型,而不是Tx const&
如果你确实知道这是你所做的,那么你可能更不了解这个含义,除非你是一个专家C++开发者,那么你可以使用一个初始化列表来复制复制构造函数。
Triple(const Triple& other) {
: a(other.a)
, b(other.b)
, c(other.c)
{ }
你不能有赋值运算符,因为赋值给引用会改变引用的对象,而不是引用,你可以用指针模拟引用,但因为我认为这不是你想要的,所以我不会详细说明
在任何情况下,您真正应该做的事情是使用std::tuple,而不是重新发明轮子。请注意,赋值运算符的问题不是由const引起的。这是因为引用必须在创建时进行初始化,即在构造函数的初始化列表中进行初始化,之后不能更改。赋值运算符更改已完全创建的对象。请注意,赋值运算符的问题不是由常量引起的。这是因为引用必须在创建时进行初始化,即在构造函数的初始化列表中进行初始化,之后不能更改。赋值运算符更改已完全创建的对象。