2016-02-11 2 views
7

delete[]はオブジェクトの配列の割り当てを解除できます。しかし、それがエラーであるかどうか、またはdelete[3]のような引数を提供するために未定義であるかどうかは、私が読んだどのソースにも言及されていません。delete [3]のようにdelete []に​​引数を指定できますか?

私は以下の質問をしています。私ができるかどうか

  1. が、それは、標準C++で指定されている/できないsuplly delete[3]としてdelete[]へのパラメータ?
  2. 「はい」の場合、効果は何ですか?
  3. から割り当てられた配列にdeleteを使用できるかどうかはC++でも指定されていますか?
+3

この質問は申し訳ありませんが、なぜあなたは削除する引数を与えたいですか? –

+2

'array [3]'が指しているものを削除する 'delete array [3]'と混同しないようにしてください。ポインタの配列を持っている場合は 'array'やその一部を削除しません。サブアレイを削除することはできません。 – leemes

+0

関数 'void move_from_array(int * target、int * source)を書くには{ * target = * source; delete [1]ソース++;/*または単にソースを削除する++ */ target ++; } ' – pasha

答えて

11

(1)はい、できません。

(3)結果は未定義であることを示します。

4

delete[]は演算子です。

delete[x]は有効なC++構文ではないため、コードはコンパイルされません。

+0

あなたが言っていることは、 'delete []'は関数名 'functionxyz'のようなもので、私がしようとしていることは 'function123'で呼び出すことですか? – pasha

0

はい、delete [x]演算子で引数を渡すことはできますが、意味はありません。 destructorclassと言いますと、無限の時間はdestructorとなります。 destructor部分はその後、正常にコンパイルが、destrutorは、プログラムの動作は未定義である無限の時間を、呼び出すことコメントのない場合は、コンパイルして正常に実行例を下回る

#include <iostream> 
using namespace std; 
class A 
{ 
public: 
A() { 
cout<<"\n Calling A constructor "; 
} 
/*~A(){ 
cout<<"\n Calling A Destructor "; 
    }*/ 
}; 
int main() 
{ 
A *a1= new A(); 

delete [3] a1; 

return 0; 
} 

これ以上のプログラム(VC++を使用してテスト)を参照してください。

関連する問題