C ++:引数で構築されたオブジェクトが破棄されると?

サイモン

引数で作成されたオブジェクトが破棄されると、関数呼び出しの前または後?

たとえば、次のコードは安全ですか?

void f(const char*)
{ ... }

std::string g()
{ ... }
...
f(g().c_str());

それは常に私のために機能しますが、それが単に未定義の動作なのか、それとも実際に機能するはずなのかはわかりません。

2000年問題

g()一時的なものです。一時的なものの寿命は、完全な式全体の評価の全時間に延長されます(あなたの場合、それはそうなるでしょうf(g().c_str()))。したがってf()、ポインタをどこかに格納しない限り、使用は安全です。

§12.2/ 4完全な表現の終わりとは異なる時点で一時的なものが破壊される2つのコンテキストがあります。最初のコンテキストは、オブジェクトを定義する宣言子の初期化子として式が表示される場合です。そのコンテキストでは、式の結果を保持する一時オブジェクトは、オブジェクトの初期化が完了するまで存続する必要があります。[...]

§12.2/ 5 2番目のコンテキストは、参照が一時的なものにバインドされている場合です。[...]

これらの2つのケースはどちらもあなたの例には当てはまりません。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

C#で破棄されたオブジェクトとは何ですか?

分類Dev

C ++オブジェクトがいつ破棄されたかを知る方法

分類Dev

C ++-オブジェクトが破棄されるのはいつですか

分類Dev

C ++のコンストラクターで例外がスローされたときに、オブジェクトのメンバー変数を破棄する

分類Dev

C ++オブジェクトが指定された値で破棄されないのはなぜですか?

分類Dev

スタック引数で構築されたオブジェクトデータのC ++変更

分類Dev

関数呼び出しは、明示的に構築されていない場合でも、戻りオブジェクトを破棄しますか?C ++

分類Dev

Objective-C ++でC ++オブジェクトが破棄されるのはいつですか?

分類Dev

c ++:一時オブジェクトが破棄されるのはいつですか

分類Dev

C#:IQueryableでDbContextを挿入すると、ASP.NETCoreで破棄されたオブジェクトにアクセスできません

分類Dev

C ++で引数として関数に渡されるときに変更されるオブジェクト

分類Dev

C ++ Lambda-関数がフィクスチャ構造体に格納されているオブジェクトから構築されると、静的関数を構築すると予期しない値が返されます

分類Dev

標準のC ++ 11は、関数に渡された一時オブジェクトが関数の終了後に破棄されることを保証しますか?

分類Dev

C ++のメソッド内にオブジェクトを作成した場合、関数が戻ったときにオブジェクトは自動的に破棄されますか、それともメモリを消費し続けますか?

分類Dev

C ++:派生クラスオブジェクトが破棄されたときの動的メモリの割り当て解除

分類Dev

CとC ++の混合コードプログラミングで例外をキャッチした後、オブジェクトは破棄されません

分類Dev

C# - 構築されたクラスの型オブジェクト

分類Dev

オブジェクトが実際にC ++で破棄されるのはいつですか?delete(ptr)は何をしますか?

分類Dev

C ++でオブジェクトを削除すると、削除されたオブジェクト内のオブジェクトが削除されますか?

分類Dev

C ++で構築された後、オブジェクトからintをインクリメントします

分類Dev

C#使い捨てオブジェクトは破棄されませんが、使用されるメモリは増加しません

分類Dev

C ++で動的に割り当てられたメモリ(配列オブジェクト)を破棄する

分類Dev

Unity-C#別のリストのオブジェクトが破棄されたときに、あるリストのアイテムのタグを変更しようとしています

分類Dev

部分的に構築されたオブジェクトにc#でアクセスできる奇妙なエッジケースはありますか?

分類Dev

移動-呼び出し可能な引数から作成されたスレッドオブジェクト引数からC ++ 11スレッドを構築する

分類Dev

スコープの最後で一時オブジェクトが破棄された後、c ++プログラムがクラッシュするのはなぜですか

分類Dev

C ++で設定された関数オブジェクト

分類Dev

C ++抽象ファクトリは構築されたオブジェクトのdestroyメソッドを提供する必要がありますか?

分類Dev

std :: allocatorの構成関数と破棄関数がC ++ 17で廃止されたのはなぜですか?

Related 関連記事

  1. 1

    C#で破棄されたオブジェクトとは何ですか?

  2. 2

    C ++オブジェクトがいつ破棄されたかを知る方法

  3. 3

    C ++-オブジェクトが破棄されるのはいつですか

  4. 4

    C ++のコンストラクターで例外がスローされたときに、オブジェクトのメンバー変数を破棄する

  5. 5

    C ++オブジェクトが指定された値で破棄されないのはなぜですか?

  6. 6

    スタック引数で構築されたオブジェクトデータのC ++変更

  7. 7

    関数呼び出しは、明示的に構築されていない場合でも、戻りオブジェクトを破棄しますか?C ++

  8. 8

    Objective-C ++でC ++オブジェクトが破棄されるのはいつですか?

  9. 9

    c ++:一時オブジェクトが破棄されるのはいつですか

  10. 10

    C#:IQueryableでDbContextを挿入すると、ASP.NETCoreで破棄されたオブジェクトにアクセスできません

  11. 11

    C ++で引数として関数に渡されるときに変更されるオブジェクト

  12. 12

    C ++ Lambda-関数がフィクスチャ構造体に格納されているオブジェクトから構築されると、静的関数を構築すると予期しない値が返されます

  13. 13

    標準のC ++ 11は、関数に渡された一時オブジェクトが関数の終了後に破棄されることを保証しますか?

  14. 14

    C ++のメソッド内にオブジェクトを作成した場合、関数が戻ったときにオブジェクトは自動的に破棄されますか、それともメモリを消費し続けますか?

  15. 15

    C ++:派生クラスオブジェクトが破棄されたときの動的メモリの割り当て解除

  16. 16

    CとC ++の混合コードプログラミングで例外をキャッチした後、オブジェクトは破棄されません

  17. 17

    C# - 構築されたクラスの型オブジェクト

  18. 18

    オブジェクトが実際にC ++で破棄されるのはいつですか?delete(ptr)は何をしますか?

  19. 19

    C ++でオブジェクトを削除すると、削除されたオブジェクト内のオブジェクトが削除されますか?

  20. 20

    C ++で構築された後、オブジェクトからintをインクリメントします

  21. 21

    C#使い捨てオブジェクトは破棄されませんが、使用されるメモリは増加しません

  22. 22

    C ++で動的に割り当てられたメモリ(配列オブジェクト)を破棄する

  23. 23

    Unity-C#別のリストのオブジェクトが破棄されたときに、あるリストのアイテムのタグを変更しようとしています

  24. 24

    部分的に構築されたオブジェクトにc#でアクセスできる奇妙なエッジケースはありますか?

  25. 25

    移動-呼び出し可能な引数から作成されたスレッドオブジェクト引数からC ++ 11スレッドを構築する

  26. 26

    スコープの最後で一時オブジェクトが破棄された後、c ++プログラムがクラッシュするのはなぜですか

  27. 27

    C ++で設定された関数オブジェクト

  28. 28

    C ++抽象ファクトリは構築されたオブジェクトのdestroyメソッドを提供する必要がありますか?

  29. 29

    std :: allocatorの構成関数と破棄関数がC ++ 17で廃止されたのはなぜですか?

ホットタグ

アーカイブ