我有一个模板类C.我想要这样的模板拷贝构造函数,它将根据其他类的大小调整数据数组的大小。用模板拷贝构造函数替换默认拷贝构造函数
以下是一个简单的例子。它工作正常。但是,请注意,Constructor 2
和Constructor 3
如此相似,我想知道是否可以将它们合并为一个?
另外,如果我简单地删除Constructor 3
,那么C<int> c3(c1)
将不会调用Constructor 2
,而是调用编译器添加的默认拷贝构造函数。这将导致内存分配不当。
template<typename T>
class C
{
public:
T* val;
int size;
public:
C(int s = 0) {
cout << "Constructor 1" << endl;
size = s;
val = (size) ? new T[size] : nullptr;
}
template<class T2>
C(const C<T2>& c2) {
cout << "Constructor 2" << endl;
size = c2.size;
val = (size) ? new T[size] : nullptr;
}
C(const C<T>& c2) {
cout << "Constructor 3" << endl;
size = c2.size;
val = (size) ? new T[size] : nullptr;
}
~C() {
cout << "~C()" << endl;
delete[] val;
val = nullptr;
}
};
int main(void)
{
C<int> c1(5);
C<float> c2(c1);
C<int> c3(c1);
return 0;
}
上述功能的输出:
Constructor 1
Constructor 2
Constructor 3
~C()
~C()
~C()
您可以在C++ 11中使用构造函数委托,也可以使用执行此初始化的成员函数(helper)。 – dyp
假设你想对你正在分配的内存做一些有用的事情,构造函数2将使用来自源类型的对象做什么? – Praetorian
你打算在这些构造函数中执行'c2.val'元素的副本吗? – dyp