回答編集履歴

1

update

2019/12/17 03:59

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -22,6 +22,8 @@
22
22
 
23
23
 
24
24
 
25
+ ----
26
+
25
27
  もし、`get_vec`メンバ関数がデータメンバへの参照を返すインタフェース(例えば戻り値型が`auto&`)だとすると:
26
28
 
27
29
 
@@ -29,3 +31,7 @@
29
31
  - 前者`str().get_vec()`は「危険」です。一時オブジェクト`str()`とともに参照先`vector<string>`実体も破棄されてしまうため、走査中のイテレータは無効オブジェクトを指してしまいます。
30
32
 
31
33
  - 後者`str_exist.get_vec()`は「安全」です。変数`str_exist`の生存期間中は参照先も生存していますから、安全に`vector<string>`実体へとアクセスできます。
34
+
35
+
36
+
37
+ 余談:個人の感性にも左右されますが、`get_vec`というメンバ関数名からはデータメンバへの参照を返すインタフェースを想起させますし、効率的なC++クラス設計としても参照を返す方がパフォーマンス上好ましいです。本当に「コピーされたデータを返す」のであれば、`clone`や`copy`などの名称を含めたほうがよいかもしれません。