回答編集履歴
1
間違いを修正
answer
CHANGED
@@ -16,4 +16,10 @@
|
|
16
16
|
かなりややこしい話があるのですが、上記のようにすることで、obj 領域がそのまま返却されますので、デストラクタは1回しか呼ばれないケースが多いです。
|
17
17
|
|
18
18
|
微妙な差で2回呼ばれることもありますので、微妙な表現をしてしまいました。
|
19
|
-
[
|
19
|
+
所謂[RVO](https://blog.kmc.gr.jp/entry/2014/12/20/231430)が機能するケースではC++17より前は処理系によって1回だけ呼ばれ、[C++17以降では1回が保証される](https://faithandbrave.hateblo.jp/entry/2017/01/24/161342)。NRVO/RVOが機能できないケースでは複数回呼ばれます。
|
20
|
+
YUKI007BKBさんのコードは、NRVOが機能して1回だけのデストラクタ呼び出しになっていますので、C++17でも1回だけ呼び出しが「保証」されるというわけではないようです。
|
21
|
+
|
22
|
+
---
|
23
|
+
【alphyaさんの回答を見て修正しました】
|
24
|
+
てっきりNRVOについてもコピー省略が保証されると理解していましが、どうも異なるようです。
|
25
|
+
alphyaさんのリンク先を見るとRVOについてのみ記載されてました。
|