我的复制构造函数中有一个警告。
基本上我在复制分配中遇到错误并且我解决了它,但随后在我的复制构造函数中弹出警告(被视为错误)。
IntList::IntList(const IntList& cpy){
head = 0;
tail = 0;
for(IntNode* i = cpy.head; i != 0; i = i->next){
push_back(i->data);
}
IntList* obj1;
IntList* obj2 = obj1;
}
IntList& IntList::operator=(const IntList& rhs){
head = 0;
tail = 0;
for(IntNode* i = rhs.head; i != 0; i = i -> next){
push_back(i->data);
}
IntList* obj1;
IntList* obj2 = obj1;
return *obj2;
}
我认为它被使用了,因为我用obj1指定了obj2(但为什么它被认为是未使用的?)
我尝试了这个但仍未解决
IntList* obj1;
IntList* obj2;
obj2 = obj1;
答案 0 :(得分:1)
这些陈述
IntList* obj1;
IntList* obj2 = obj1;
没有任何意义。删除它们。
考虑到复制赋值运算符
IntList& IntList::operator=(const IntList& rhs){
head = 0;
tail = 0;
for(IntNode* i = rhs.head; i != 0; i = i -> next){
push_back(i->data);
}
IntList* obj1;
IntList* obj2 = obj1;
return *obj2;
}
无效。它不会释放列表中所有先前分配的内存。它应该返回自己的参考。所以最后的陈述应该是
return *this;
操作员可以按以下方式查看
IntList & IntList::operator =( const IntList &rhs )
{
while ( head )
{
IntNode *tmp = head;
head = head->next;
delete tmp;
}
tail = head;
for ( IntNode* i = rhs.head; i != 0; i = i -> next )
{
push_back( i->data );
}
return *this;
}
答案 1 :(得分:0)
您应该使用obj1
替换赋值运算符函数中包含obj2
和return *this;
的两行。复制构造函数中不需要包含obj1
和obj2
的两行。
答案 2 :(得分:0)
以下代码中没有用处。这毫无意义。
IntList* obj1;
IntList* obj2 = obj1;
此外,它看起来是您正在复制列表,但实际上并没有将头节点分配给某个指针。因此,当函数结束时,您将丢失复制的列表。