2012-02-07 9 views
1

高価なコンストラクタを持つクラスがあり、それが "シンプル"なのでコンストラクタを作成する必要はないとしましょう。クラスの中で、私はtypedefを入れたいです。すべて一緒に、それは次のようになります。私がしなければクラス内のtypedef

class Expensive { 
public: 
    typedef double data_type; 
    data_type data[100000][100000]; 
}; 

、私の呼び出し元のコードでは、:

Expensive::data_type singleValue; 

Expensiveの一時的なインスタンスを作成し、データのために、すべてのそのスペースを割り当てるために行くということですtypedefにアクセスするだけですか?

+0

幸運にもそれをスタックに割り当てる。なぜあなたは 'data_type data [100000] [100000];'を書かないのですか? –

+1

質問を強調するのは、人為的な例でした。インテルのコンパイラを使用していて、実際にそれが機能したければ、すべての配列をヒープ上に置くフラグがあります。または、私のスタックを無制限に 'ulimit'してください。 – tpg2114

+0

申し訳ありませんが、(a)コードが貧弱で、(b)ほとんどの設定ではうまくいかないので、愚かな例です –

答えて

3

簡単に言えば、いいえ。操作には実行時の影響はありません。ダブルを宣言しただけでも、それを使用していない場合でも実行時には何の効果もないことを保証しません);

0

いいえ;あなたは実質的にクラスの静的メンバーであるものにアクセスしています。インスタンスが作成されないため、巨大な配列はありません。