回答編集履歴
1
update
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`などの名称を含めたほうがよいかもしれません。
|