RVO (および NRVO) の定義について理解できません。これは、RVO がコピー コンストラクターを省略していると仮定して、このような質問が複数あるためです。12.8.15によると
このような場合、実装は、省略されたコピー操作のソースとターゲットを、同じオブジェクトを参照する 2 つの異なる方法として扱い、そのオブジェクトの破棄は、2 つのオブジェクトが削除されなかった場合に発生します。最適化。
コピー コンストラクターの呼び出しが省略されているのではなく、コピー自体が省略されているように見えます。最初にオブジェクトが「コピー」の場所に構築されるだけなので、「元の」オブジェクトはなく、コピーもまったくありません。したがって、クラスにprivate
コピー コンストラクターがある場合でも、コピーがないため、RVO が開始されたときに関数から返される可能性があります。
私はそれを正しく理解していますか?コピー自体が省略されているか、コピーコンストラクタの呼び出しが省略されていますか? オブジェクト クラスにプライベート コピー コンストラクターがある場合、関数からオブジェクトを返すことを許可する必要がありますか?