我不会问这个,但经过大约5个小时的谷歌搜索和挖掘堆栈,教科书和YouTube视频后,我仍然被卡住了。这是我正在使用的代码(是的,它非常糟糕,我只是学习C ++)如果你把它放到底部,你会发现我无法让复制构造函数实际创建另一个SimpleVector类型的对象。最后一行显示了我尝试使用我创建的复制构造函数从mySV创建mySV2的位置,然后通过对新对象使用print函数来证明它发生了。
再次感谢您的帮助,并提出我的新问题。我真的相信反馈是冠军的早餐(而且不那么蹩脚的程序员)所以请大声说出来,并且知道我会永远感激(或者至少在本课程期间)为你提供帮助。
template <class T>
class SimpleVector {
public:
T* myarray;
T* temparr;
//constructors
SimpleVector() {
size = 0;
myarray = NULL;
}
SimpleVector(int sz) {
size = sz;
myarray = new T[size];
}
//**** Copy Constructor ****
SimpleVector(const SimpleVector& sv) {
size = sv.size;
dataType = sv.dataType;
temparr = new T[size];
for (int i = 0; i < size; i++) {
temparr[i] = sv.myarray[i];
}
myarray = temparr;
}
};
int main() {
int howMany = 5;
SimpleVector<string> mySV(howMany);
for (int i = 0; i < howMany; i++) {
cout << "Enter item " << (i + 1) << ": ";
cin >> mySV.myarray[i];
}
mySV.print();
template<class T>
SimpleVector<T> mySV2(mySV);
mySV2.print();
return 0;
}
答案 0 :(得分:1)
您的代码存在一些问题。行temparr = new T[size];
创建内存泄漏,因为析构函数中未删除temparr
。复制构造函数实际上不需要temparr
:
SimpleVector(const SimpleVector& sv){
size = sv.size;
dataType = sv.dataType;
myarray = new T[size];
for (int i = 0; i < size; i++) {
myarray[i] = sv.myarray[i];
}
}
如果复制基本类型的指针,我还建议使用<utility>
标题中的std::copy函数。在处理复制构造函数时,您还应该考虑the rule of three。
下一期可在主要内容中找到:
template<class T>
SimpleVector<T> mySV2(mySV);
在这里,您需要指定构造对象的T
类型。您的类成员dataType
无法指定新创建的对象的类型。你应该把它改成
SimpleVector<std::string> mySV2(mySV);
添加void print()
成员函数,成员size_t size
和std::string dataType
代码正确执行后。