struct Node
{
int value
Node* next;
}
typedef List Node*
const Set operator +(const Set& a, const Set& b)
{
Set aSet;
List newList = mergeListsCopy(a.list, b.list);
aSet.list = newList;
return aSet;
}
class Set
{
public:
//method decs
private:
List list;
};
Set::~Set()
{
list = deleteList(list);
}
完全に罰金このコードの動作の内部には、mergeListsCopyは2つの単独でリンクされたリストから新しいリストを作成し、ASETのプライベート変数であるリストへのポインタをassignes。C++演算子のオーバーロードとデストラクタ
問題は、aSetが返されたときに、aSet.listが何らかの変なポイズンアドレス(この場合は0xf)です。
私はデバッガで実行したとき、オペレータのオーバーロードの範囲でSetが作成されましたが、このセットへの2つの参照もシンボルaSetを使用してローカルで作成されました。戻りが発生する前に、プログラムはデストラクタおそらく無関係のSetに対してですが、Setが1つしかないので、それは破壊されます。
私のデストラクタをコメントアウトすると、この問題は解消されます。私は何を間違えたのですか?
NBの演算子メソッドは、関数呼び出しの仕事を使用する友人です。 – awiebe