リスト内のデータがポインターである双方向リンクリストの実装について少し混乱しています。
リンク リスト クラスのプライベート部分は次のようになります。
private:
struct node {
node* next;
node* prev;
T* o;
};
node* first; // The pointer to the first node (NULL if none)
node* last; // The pointer to the last node (NULL if none)
unsigned int size_;
ご覧のとおり、このリストは単なる古いオブジェクトではなく、オブジェクトへのポインターでいっぱいです。
仕様書には以下の記述があります。
このリストは、含まれている型 T にわたってテンプレート化されていますが、T のインスタンスではなく、T へのポインターのみを挿入および削除することに注意してください。これにより、Dlist 実装は、挿入されたオブジェクトを所有していることを認識し、リストコピーされ、リストが破棄された場合はそれらを破棄する必要があります。
私の現在の insertFront(T* o) の実装は次のとおりです。
void Dlist::insertFront(T* o) {
node* insert = new node();
insert->o = new T(*o);
insert->next = first;
insert->prev = last;
first = insert;
}
しかし、これは間違っているようです。T にコピー コンストラクターがない場合はどうなるでしょうか。そして、これはどのようにしてリスト内のオブジェクトの唯一の所有権を保証するのでしょうか?
私はただできるでしょうか:
insert->o = o;
次のような場合、これは安全ではないようです。
Object* item = new Object();
dlist.insertFront(item);
delete item;
次に、リストのアイテムも破棄されます。これは正しいです?私の理解はどこかずれていますか?
読んでくれてありがとう。
注: これは宿題のように見えますが、そうではありません。私は実際には Java 開発者であり、古い学校のプロジェクトを実行してポインタのスキルを磨いています。