質問するログイン新規登録

回答編集履歴

1

refine

2015/07/18 08:10

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -1,5 +1,7 @@
1
- C++のスマートポインタ(`shared_ptr`, `weak_ptr`)は、インスタンスの所有権(ownership)を管理するものです。その他に所有権を扱う方法として、下記が考えられます。いずれも`shared_ptr<T>`や`weak_ptr<T>`より「軽量」な仕組みですから、必要に応じて利用検討してください。
1
+ C++のスマートポインタ(`shared_ptr`, `weak_ptr`)は、インスタンスの所有権(ownership)を管理するものです。
2
2
 
3
+ C++プログラムにて所有権を扱う方法として、その他には下記が考えられます。いずれも`shared_ptr<T>`や`weak_ptr<T>`より「軽量」な仕組みですから、必要に応じて利用検討してください。
4
+
3
5
  (1) (スマートポインタではない)**値型**`T`**としてメンバ変数を保持**する。保持クラスのインスタンス生存期間=対象インスタンスの生存期間であり、保持クラスが対象インスタンスを所有する場合はこれがベストです。
4
6
  (2) **関数の引数型として、**スマートポインタの代わりに**参照型**(`T&`, `const T&`)**をとる**。インスタンスの所有権は関数呼び出し元に残っており、関数呼び出し中(≒呼び出し元は待機状態)だけインスタンスにアクセスさせるという考え方です。
5
7
  (3) 所有権を共有する必要がなければ、`shared_ptr<T>`ではなく`unique_ptr<T>`を使うべきです。`unique_ptr<T>`の方が(アクセス時間・メモリ専有量ともに)実行時オーバーヘッドが小さくなります。なお、必要に応じて`unique_ptr<T>`から`shared_ptr<T>`へと変換可能です。