| |
newで作成した配列の要素数を取得することが可能です。 ただし、オブジェクトにデストラクタが実装されていることが条件です。 ※全てのC++コンパイラで利用できるか不明なので自己責任でお願いします。 VCとGCCではいけました。 以下サンプルコード | |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <cstdio> // printfに必要なヘッダー
class A
{
public:
virtual ~A(){} // デストラクタ
};
int main()
{
// デストラクタのあるオブジェクトの配列作成
A* a = new A[10];
// 配列の先頭アドレスの4バイト手前に要素数が入っています。
printf( "%d\n", *((int*)a-1) );
delete[] a;
return 0;
} |
出力 10 | |
配列の先頭アドレスの4バイト手前に要素数が入っていることが分かります。 これでdelete[]を行った時に全てのデストラクタを呼ぶ仕組みが実現できるわけですね。 | |