2009-06-15 5 views
-3

Q1。次のコード行では、まず何が起こるのですか?メモリ割り当て、またはコンストラクタ呼び出し?C++割り当て、構築および破壊質問

int *ptr = new int(); 

Q2。オブジェクトを削除する次の3つの方法の違いは何ですか?

  1. DELETE演算子でオブジェクトが破壊された場合。デストラクタは呼び出されますか?
  2. オブジェクトを破壊するためにデストラクタが明示的に呼び出された場合(例:a1.~A()
  3. オブジェクトは単にスコープから外れます(つまり、明示的なデストラクタコールも、DELETE演算子も使用されません)。

デストラクタがプライベートか保護されている場合の動作は何ですか?

+7

これに意味のあるタイトルを付け、関係のない2つの質問をします。 –

+0

Evanが言ったように、他の人に恩恵を受けるように質問をフォーマットしてみてください。 2つの質問がある場合は、別々に質問し、それぞれに意味のあるタイトルを付けます。そうすれば、次回誰かが同じ問題に遭遇したときに、彼らはあなたの質問を検索して見つけることができます。 – jalf

+2

私は2つの疑問も持っています.1つは宿題の質問ではなく、もう1つはあなたのためにそれをやろうとしていることです。 –

答えて

3

あなたの質問には多少意味のあるタイトルが付いていますので、私もそれらにもお答えしようと思います。 (あなたは本当に複数の質問を複数の投稿に入れてください)。

。割り当てが最初に行われます。これは、明らかに、オブジェクトが割り当てられるまでが存在しないためです。その後、コンストラクタを実行してオブジェクトに値を渡すことができます。

Q2

1. If an object is destroyed with DELETE operator. Will destructor be called? 

はい。

2. If a destructor is called explicitly (e.g. a1.~A()) to destroy the object? 

ここに本当の質問はありません。

3. Neither explicit destructor call is made nor DELETE operator is used to destroy the object but object goes out of scope. 

この質問はあいまいです。その削除の側面は、オブジェクトがヒープ上に割り当てられたことを意味します。その場合、スコープから外れることはありません...しかし、オブジェクトへのポインタはが範囲外になります。これがあなたが話していることであれば、メモリリークが発生します。

しかし、スタックに割り当てられたオブジェクトについて話している場合、そのデストラクターはスコープ外になると呼び出されます。

関連する問題