【发布时间】:2016-06-26 22:43:50
【问题描述】:
所以我正在为一个具有动态 int 数组的类编写大五
struct intSet {
int *data;
int size;
int capacity;
intSet();
~intSet();
intSet(const intSet& is);
intSet(intSet &&is);
intSet &operator=(const intSet& is);
intSet &operator=(intSet &&is);
}
到目前为止我得到了什么:
intSet::intSet(const intSet& is){
this->size=is.size;
this->capacity=is.capacity;
this->data=is.data;
}
intSet::intSet(intSet &&is){
this->size=is.size;
this->capacity=is.capacity;
this->data=is.data;
is.data=nullptr;
}
intSet& intSet::operator=(const intSet& is){
if(&is!=this){
size=is.size;
capacity=is.capacity;
delete [] data;
data=is.data;
data=new int[capacity];
for(int i=0;i<size;i++){
data[i]=is.data[i];
}
}
return *this;
}
intSet& intSet::operator=(intSet &&is){
if(&is!=this){
size=is.size;
capacity=is.size;
delete [] data;
data=is.data;
is.data=nullptr;
}
return *this;
}
intSet::~intSet(){
delete [] this->data;
}
显然有问题但我对五巨头不是很熟悉...我搜索了很多但仍然没有找到答案...
【问题讨论】:
-
您的复制构造函数正在制作浅拷贝,而您的复制赋值运算符正在制作深拷贝。另外,请使用构造函数initializer-list,这不是Java。
-
@BryanChen 所以五巨头是复制构造函数、复制赋值、移动构造函数、移动赋值。
-
如果可能,请使用
shared_ptr或unique_ptr并遵循零规则
标签: c++ copy-constructor move-constructor copy-assignment move-assignment-operator