0

最後の行でなぜ*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;
}
4

1 に答える 1

0

を使用して参照を返すことができます。これは、たとえばメソッドチェーン*thisに非常に役立ちます。オブジェクトが別の場所で削除されても、メモリ リークは発生しません。

まあ、コードを編集したので、はい、これはリークします...最近のコンパイラを使用している場合は、スマートポインタを使用してこの問題を処理できますが、学習している場合はお勧めしませんが、重要ですメモリ管理をよく理解する。

この特定のケースでは、関数はポインターを返す必要があります。または、return ステートメントでコピー コンストラクターを呼び出してオブジェクトのコピーを返し、本体で一時的なものを使用することもできますが、これはあまりクリーンなソリューションではありません。

于 2013-04-22T22:01:14.007 に答える