
|
115
4 章
スマートポインタ
詩人や作詞家は愛について特別な思い入れを持ちます。また、数え方にこだわることもあり、時
にはその両方に大きな意味を見出します。Elizabeth Barrett Browning 1 と Paul Simon 2 では愛と
その数え方が異なりますが、これに触発されたので試しに raw ポインタをなかなか愛せない理由を
数えてみましょう。
1. その宣言からでは、単一オブジェクトを指すのか、配列を指すのかを判断できない。
2. その宣言からでは、使用を終えた時に対象オブジェクトを破棄すべきか否か、すなわちポイ
ンタがその指しているオブジェクトを所有しているか否かを判断できない。
3. 対象オブジェクトを破棄すべきと判断したとしても、delete するか、もしくは他の破棄方法
を実行すべきか(そのポインタ専用の破棄関数など)、破棄方法を通知する手段がない。
4. 破棄方法が delete だと分かったとしても、上記の理由 1 のように単一オブジェクトとして
扱うのか(「delete」)、それとも配列として扱うのかを知る術がない(「delete []」)。形態
が一致しない破棄を実行するとその結果は未定義となってしまう。
5. ポインタが対象オブジェクトを所有しており、破棄方法も判明したとしても、コードの全実
行パス中で正確に一度だけ破棄するのは容易ではない(例外処理の実行パスも含め)。実行パ
スをすべて把握できなければリソースの解放もれになり、逆に複数回破棄しては未定義動作
となってしまう。 ...