関数が戻ったときにコピーコンストラクターが呼び出されないのはなぜですか?

アイスマン
Line Line::operator =(Line ln) {
        cout << "Assignment operator\n";
        Line temp;
        temp.ptr = new int;
        *temp.ptr = *(ln.ptr);
        return temp;
    }

上記のコードでは、次のステートメントが実行されたときにコピーコンストラクターは呼び出されません。

return temp;

戻り値は値によるものなので、コピーコンストラクターが呼び出されないのはなぜですか?

ありがとう

ディートマークール

上記の設定では、コンパイラがコピーコンストラクタを省略し、代わりtempに、戻り値が期待される場所に一時直接構築する可能性が非常に高くなります。コピーコンストラクタに副作用がある場合でも、コピーの省略は明示的に許可されます。ただし、コピーが省略された場合でも、コピーまたは移動コンストラクターはアクセス可能である必要があります。つまり、コピー省略の可能性によって、対応するコンストラクターのルールが緩和されてアクセス可能になることはありません。

コピーコンストラクターを絶対に呼び出したいと思う場合は、たとえば、結果を恒等関数に渡すことで、コピーの構築を強制できます。

template <typename T>
T const& identity(T const& object) {
    return object;
}
// ...
    return identity(temp);

ただし、通常は、コピーコンストラクターを削除する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

値によって関数に渡されたときと別のコンストラクターに値によって渡されたときのコンストラクターの呼び出しに違いがあるのはなぜですか?

分類Dev

関数の戻り値でオブジェクトを初期化するときにコピーコンストラクターが呼び出されない

分類Dev

ボタンがクリックされたときにコンポーネント関数が呼び出されないのはなぜですか

分類Dev

コピーの初期化:コピーの省略がオフになっているのに、移動またはコピーコンストラクターが呼び出されなかったのはなぜですか?

分類Dev

std :: string moveコンストラクターが呼び出されなかったのはなぜですか?

分類Dev

移動コンストラクターが呼び出されなかったのはなぜですか?

分類Dev

コピーコンストラクタが呼び出されたのはなぜですか?

分類Dev

この関数がmoveコンストラクターを呼び出さないのはなぜですか?

分類Dev

式のreturnステートメントによってコピーコンストラクターが呼び出されるのはなぜですか?

分類Dev

constオブジェクトでstd :: moveを呼び出すと、別のオブジェクトに渡されたときにコピーコンストラクターが呼び出されるのはなぜですか?

分類Dev

テンプレート化されたコピーコンストラクタが呼び出されないのはなぜですか?

分類Dev

コントローラの別の関数から呼び出されたときにview :: makeが機能しないのはなぜですか?

分類Dev

コピーコンストラクタと移動コンストラクタが一緒に呼び出されるのはなぜですか?

分類Dev

コンストラクターが明示的に呼び出されたときに、戻り値の型がないのに一時オブジェクトを返すのはなぜですか?

分類Dev

オブジェクトをパラメーターとして渡すときに、デストラクタが呼び出されているのにコンストラクションが呼び出されていないのはなぜですか?

分類Dev

C ++なぜコピーコンストラクタが呼び出されたのですか?

分類Dev

オーバーロードされた代入演算子を呼び出すときにコピーコンストラクターが呼び出されるのはなぜですか?

分類Dev

コンストラクターが2回目に呼び出されないのはなぜですか?

分類Dev

ラムダで移動するときにmoveコンストラクターが呼び出されないのはなぜですか?

分類Dev

コピーコンストラクタが呼び出されるのはなぜですか?

分類Dev

別の関数の内部で呼び出された関数が外部関数のスコープにアクセスできないのはなぜですか?

分類Dev

パラメータをコピーすると、削除されたコンストラクタが呼び出されるべきでないときにそのコンストラクタが呼び出されます

分類Dev

C関数を呼び出すときにコンパイラの時間エラーがスローされないのはなぜですか

分類Dev

子クラスのコンストラクターが呼び出されないのはなぜですか?

分類Dev

Cupsクラスのコンストラクターが呼び出されないのはなぜですか?

分類Dev

C ++で基本クラスへのポインターが与えられたときに、派生クラスオブジェクトのオーバーロードされた関数が呼び出されないのはなぜですか?

分類Dev

移動コンストラクターではなくコピーコンストラクターが呼び出されるのはなぜですか?

分類Dev

重要なコンストラクターは、将来の戻り関数を呼び出すことができますか(方法または代替)

分類Dev

単純なコンストラクターが呼び出された後にコピーコンストラクターが呼び出されるのはなぜですか?

Related 関連記事

  1. 1

    値によって関数に渡されたときと別のコンストラクターに値によって渡されたときのコンストラクターの呼び出しに違いがあるのはなぜですか?

  2. 2

    関数の戻り値でオブジェクトを初期化するときにコピーコンストラクターが呼び出されない

  3. 3

    ボタンがクリックされたときにコンポーネント関数が呼び出されないのはなぜですか

  4. 4

    コピーの初期化:コピーの省略がオフになっているのに、移動またはコピーコンストラクターが呼び出されなかったのはなぜですか?

  5. 5

    std :: string moveコンストラクターが呼び出されなかったのはなぜですか?

  6. 6

    移動コンストラクターが呼び出されなかったのはなぜですか?

  7. 7

    コピーコンストラクタが呼び出されたのはなぜですか?

  8. 8

    この関数がmoveコンストラクターを呼び出さないのはなぜですか?

  9. 9

    式のreturnステートメントによってコピーコンストラクターが呼び出されるのはなぜですか?

  10. 10

    constオブジェクトでstd :: moveを呼び出すと、別のオブジェクトに渡されたときにコピーコンストラクターが呼び出されるのはなぜですか?

  11. 11

    テンプレート化されたコピーコンストラクタが呼び出されないのはなぜですか?

  12. 12

    コントローラの別の関数から呼び出されたときにview :: makeが機能しないのはなぜですか?

  13. 13

    コピーコンストラクタと移動コンストラクタが一緒に呼び出されるのはなぜですか?

  14. 14

    コンストラクターが明示的に呼び出されたときに、戻り値の型がないのに一時オブジェクトを返すのはなぜですか?

  15. 15

    オブジェクトをパラメーターとして渡すときに、デストラクタが呼び出されているのにコンストラクションが呼び出されていないのはなぜですか?

  16. 16

    C ++なぜコピーコンストラクタが呼び出されたのですか?

  17. 17

    オーバーロードされた代入演算子を呼び出すときにコピーコンストラクターが呼び出されるのはなぜですか?

  18. 18

    コンストラクターが2回目に呼び出されないのはなぜですか?

  19. 19

    ラムダで移動するときにmoveコンストラクターが呼び出されないのはなぜですか?

  20. 20

    コピーコンストラクタが呼び出されるのはなぜですか?

  21. 21

    別の関数の内部で呼び出された関数が外部関数のスコープにアクセスできないのはなぜですか?

  22. 22

    パラメータをコピーすると、削除されたコンストラクタが呼び出されるべきでないときにそのコンストラクタが呼び出されます

  23. 23

    C関数を呼び出すときにコンパイラの時間エラーがスローされないのはなぜですか

  24. 24

    子クラスのコンストラクターが呼び出されないのはなぜですか?

  25. 25

    Cupsクラスのコンストラクターが呼び出されないのはなぜですか?

  26. 26

    C ++で基本クラスへのポインターが与えられたときに、派生クラスオブジェクトのオーバーロードされた関数が呼び出されないのはなぜですか?

  27. 27

    移動コンストラクターではなくコピーコンストラクターが呼び出されるのはなぜですか?

  28. 28

    重要なコンストラクターは、将来の戻り関数を呼び出すことができますか(方法または代替)

  29. 29

    単純なコンストラクターが呼び出された後にコピーコンストラクターが呼び出されるのはなぜですか?

ホットタグ

アーカイブ