2

newで定義された配列のサイズを知ることができる関数(書くことができる)はありますか:

  int *a=new int[3];
  *a=4;
  *(a+1)=5;
  *(a+2)=6;  

ありがとう!

4

3 に答える 3

8

で割り当てられた配列のサイズを取得する標準的な方法はありませんnew

配列割り当てのより良いアプローチはstd::vector、メンバーを持っている でありsize()、スコープ外になると自動的にクリーンアップされます。

于 2013-04-20T16:04:19.997 に答える
5

簡単な答え:いいえ

std::vector代わりに使用してください。

于 2013-04-20T16:04:23.877 に答える
1

このための関数を書くことは可能でしょう。しかし、現実の世界では、それは悪い考えです。

呼び出すという行為は、new割り当てられた配列内の要素の数 (または少なくともその下にある実際の割り当てのサイズ) を保存する可能性が最も高いですが、そうでない方法でその情報を取得する方法はありません。特定のシステムでどのように機能するかを知ることに依存してnewおり、コードを別の方法でコンパイルしたり (コードのデバッグ バージョンやリリース バージョンなど)、コンパイラ (またはランタイム ライブラリ) のバージョンを変更したりすると、それが変わる可能性があります。

前述のように使用することstd::vectorは、はるかに優れた方法です。これは、配列を別の場所で解放することについても心配する必要がないためです。

なんらかの理由で を使用したくない [または家庭教師から使用できないと言われた] 場合std::vectorは、割り当てのサイズを「覚えておく」必要があります。

于 2013-04-20T17:40:01.567 に答える