可変長配列メンバ

ロベールのC++入門講座 16-14

クラスのメンバ変数の配列の要素数を可変長にするテクニックの話です。

まず配列の要素を一つだけで宣言しておきます。

class CSample {
public:
    int m_int;
    char m_char[1];
};

そしてこのクラスを定義する際に、クラスのサイズよりも大きなサイズを確保します。

CSample* obj = reinterpret_cast<CSample*>(new char[sizeof(CSample)+10]);

クラスのサイズよりも10大きなサイズを確保することで、m_charのサイズを動的に変更できます。

このとき、newで確保するのは1バイトが保障されているcharで行い、reinterpret_castにて目的のクラスへとキャスト変換します。

またこのやり方で確保したオブジェクトを解放する場合、ちゃんとchar型に戻してから行う必要があります。

delete reinterpret_cast<char*>(obj);

なかなか面白いですね。あまり頻繁に使うことはなさそうですが、覚えておいて損はないとおもいます。