リンクリストを少し調べたところ様々な種類のものが使われているようで
様々な分類が生じるうち今回関係するノードの参照については以下の4種類あるようだ
(A) データを挿入しても作られたノード自体は返さない方式
実際にこの仕様でも困らない用途も多いようでこの方式も普通に使われている
もちろん問題は何も生じない
(B) データを挿入して作られたノードのポインタを直接返す方式
これは危険で最も推奨されない方式
ポインタを握っていても使う時にそのノードは削除されているかもしれない
削除で開放されてヒープに戻され更に再利用されているとデータの中身もnext辿りも滅茶苦茶になりうる
そしてデータの扱い次第で実際に削除は起き得るしUI人間や通信相手から発動ルーチンでの削除も有り得る
(C) データを挿入して作られたノードの(一般的な)スマートポインタを返す方式
これはshared_ptrなど安全とされているスマートポインタを返すためメモリ使用上は安全
しかしポインタ先がヒープへ戻されていないことしか保証がない
つまり(B)と同様にリンクリスト自体からの削除が起きている可能性がありそれを知る方法がない
(D) データを挿入して作られたノードを管理しているリンクリスト内部の何らかを返す方式
リスクの高い(B)や(C)と異なりこの方式は安全かつ整合性が維持される
もしノードがリンクリストから削除されていればそれに対して対応ができる
この返されたデータを用いて新たなデータをその位置に挿入する時に元ノードが削除されていた場合
(D)-1. 挿入はされず既に元ノードが削除されていると知らせる
(D)-2. 知らせずに削除された元ノードの次に有効なノードの位置に挿入する
などリンクリストの仕様や用意されたメソッドにより異なるようだ
以上まとめると現実的に安全に使える方式は(A)もしくは(D)となっている
例えばC++の標準リンクリストstd::listでもこの(D)方式を採用しており
insert()はリンクリスト上をその位置から順に辿っていくイテレータを返す
C++ vs Rust
■ このスレッドは過去ログ倉庫に格納されています
592デフォルトの名無しさん
2021/11/29(月) 12:43:56.81ID:4MgUQE5v■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 ★6 [Ailuropoda melanoleuca★]
- 【米紙報道】高市首相「コングレッショナルフェロー(官職)」経歴詐称疑惑… [BFU★]
- 《独裁に党内から異論噴出!》高市首相 暴かれた本性 〈木下秘書の陰謀論「文春は中国から毎週1000万円もらっている」〉 | 週刊文春 [少考さん★]
- 【W杯】元ブラジル代表ロナウド氏「日本には簡単に勝てる」決勝T1回戦で対戦可能性…避けたいのは「オランダ」 ★2 [首都圏の虎★]
- 「もっと日本人を雇え‼」と炎上したことも…店員は"ほぼ外国人"、業界トップゆで太郎社長がいま明かす本音 [少考さん★]
- 【北中米W杯】決定機でシュートミスをしたイングランド代表FWケイン。ガーナの呪術師「彼に呪いをかけた」と告白 [首都圏の虎★]
- 総務省「ごめん、携帯の2年縛りを潰したけど、事実上の1年縛りを導入します」 [594040874]
- 【実況】博衣こよりのえちえちこども裁判クイズ🧪★3
- 金バエ(享年48)「毎日ビール9リットル飲んでいたら肝硬変になりました」 [832215575]
- 🏡
- 【大爆笑】高市、アメリカにインターンで行ってただけだった。連邦議会立法調査官とは一体… [744361492]
- 晋世紀アヴェンゲリオン 第1話「山上、襲来」 [769931615]