-1

C++ 11 n3242「サブオブジェクトの期間、オブジェクトの有効期間」、3.8/1 からのポイント:

オブジェクトの有効期間は、オブジェクトのランタイム プロパティです。オブジェクトがクラスまたは集約型であり、それまたはそのメンバーの 1 つが自明なデフォルト コンストラクター以外のコンストラクターによって初期化される場合、そのオブジェクトは非自明な初期化を持つと言われます[ 注: 自明なコピー/移動コンストラクターによる初期化は非自明です。 -些細な初期化。— エンドノート]

型 T のオブジェクトの有効期間は、次の時点で始まります。

  • タイプ T に適した位置合わせとサイズのストレージが取得されます。
  • オブジェクトに重要な初期化がある場合、その初期化は完了しています。

タイプ T のオブジェクトの存続期間は、次の場合に終了します。

  • T が非自明なデストラクタ (12.4) を持つクラス型の場合、デストラクタの呼び出しが開始されます。
  • オブジェクトが占有するストレージは再利用または解放されます。

ここで彼らは、オブジェクトの有効期間を持つ自明または自明でないコピー/移動コンストラクターについて述べました。これをサンプルプログラムで説明できる人はいますか?

また、ポイントの変化は、型のオブジェクトの寿命がいつ始まるかを示していますが、いつ終わるTかについては言及していません。Tなんで?

4

2 に答える 2

2

ここで彼らは、オブジェクトの有効期間を持つ自明または自明でないコピー/移動コンストラクターについて述べました。これをサンプルプログラムで説明できる人はいますか?

それは単なるセマンティクスです。いずれの場合も、これは「コンストラクターの実行が終了したときにオブジェクトの有効期間が始まる」と言い換えることができます。些細な構成は実際にはそのような実行を伴わないため、引用は徹底的です。

この点の「例」を示すのは簡単ではありません。自明なコンストラクターと自明でないコンストラクターを示すことはできますが、実際には何も教えてくれないので、ここでは説明しません。

また、ポイントの変更は、タイプ T のオブジェクトの有効期間がいつ始まるかを示していますが、T がいつ終了するかについては言及していません。なんで?

はい、彼らがしました。あなたの質問の引用を再フォーマットしたことで、より明確になるはずです。

于 2011-09-27T07:09:07.683 に答える
1

一般に、オブジェクトはそのコンストラクターが完了するまで実行されたときに生きており、そのデストラクタの開始まで生きています。

例外は、非常に自明なタイプであり、それらに対して実行されるコンストラクターがありません。たとえば、コードの後

int* p = (int*)malloc(1024);

int何らかの方法で初期化されておらず、コンストラクターが実行されていないにもかかわらず、生きている s の束があります。それでも、それらはそこにあり、それらに値を割り当てることができます。

于 2011-09-27T17:58:01.350 に答える