まず、リストには一般的に同じノードが含まれるべきではないことを指摘しておきます。リスト間で共有オブジェクトが必要な場合は、ノード自体を共有するのではなく、ノード内のオブジェクトへのポインタまたは参照を保存します。
ノード自体を共有する必要がある場合は、必要なものはreference countingです。
本質的に、ポインタまたは特定のオブジェクトへの参照の数を(変数内で)追跡し、数値が0になったときにのみメモリを解放して、オブジェクトに到達できなくなったことを示します解放されるべきである。
はSTLで参照カウントを行うには、C++ 11以降のSTLである、
shared_ptr
を使用しています。
struct node
{
node(const data_t&);
data_t data;
std::shared_ptr<node> next;
};
auto head1 = std::make_shared(some_data1);
auto head2 = std::make_shared(some_data2);
head1->next = std::make_shared(some_data);
head2->next = head1->next;
//note that you do NOT copy the raw pointer, you must copy the shared_ptr itself
head1.reset(); //destroys some_data1 but not some_data
head2.reset(); //destroys some_data2 and some_data
あなたのリストをクロスリンクしないでください。その短期的には、 'std :: shared_ptr'を使って、ランタイムがそれを並べ替えるようにしてください。 – WhozCraig
コードとエラーを共有してください。 – Awais
最小限の再現可能な例を示してください。 – user31264