为什么方法最后调用复制构造函数?

时间:2013-04-22 21:59:38

标签: c++ constructor copy

我不明白为什么在最后一行 return * newP; 方法进入复制构造函数这会造成内存泄漏,因为我无法释放从副本创建的新Poly构造

const Poly Poly::operator * (const Poly &p1) const {
Poly* newP= new Poly;
delete newP->headList->mono;
newP->headList->mono=NULL;
delete newP->headList;
newP->headList=NULL;
newP->SetCount(0);
//two pointer to run on the list

Node* tmp,* tmp2;
tmp= this->headList;
tmp2=p1.headList;
Mono* mono= new Mono;
int n,d,p;
while (tmp != NULL)
{
    while (tmp2!=NULL)
    {
        *mono=(*tmp->mono)*(*tmp2->mono);
        n=mono->GetiNom();
        d=mono->GetiDenom();
        p=mono->GetPower();
        newP->Insert(n,d,p);
        tmp2=tmp2->next;
    }   
    tmp=tmp->next;
    tmp2=p1.headList;
}
delete mono;
return *newP;
}

1 个答案:

答案 0 :(得分:0)

您可以使用*this返回引用,例如,这对method chaining非常有用。如果在其他地方删除对象,它不会泄漏内存。

好吧,既然你编辑了你的代码,是的,这确实是泄密...如果你使用的是最近的编译器,你可以使用智能指针来解决这个问题,虽然如果你正在学习我不推荐它,了解内存管理非常重要。

对于这种特殊情况,函数应该返回一个指针,是的。或者,它可以通过在return语句中调用复制构造函数来返回对象的副本,并在正文中使用临时,但它不是一个非常干净的解决方案。