次のFactory関数を考える。
raw pointerを返しているため、だれが所有権を持つのか(だれがdeleteするのか)不明確である。以下のように書くとメモリーリークを起こす。
だれが所有権を持つのかをコメントに残せば良いかもしれない。しかし、最も有効な解決策は、所有権の所在をsignatureとして表現することである。所有権を排他的にしたいなら
共有したいなら
となる。これで、こう書いてもメモリーリークはしなくなる。
std::unique_ptr
は
std::shared_ptr
よりオーバヘッドが小さいので
を採用すべきである。必要ならいつでも
std::shared_ptr
に暗黙変換できる。また、ユーザ定義のスマートポインタへの変換も容易である。
参照
0 件のコメント:
コメントを投稿