- 392 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:51:58 ]
- std::vectorの場合は、T()、つまり値初期化されるので、intやPODな構造体だと結果的に0初期化になる。
だから、とりあえずは>>375のコードのnewのところをnew(Mem) T();とすればいい。Tの後の括弧が重要。 (コピーコンストラクタなど)コンストラクタに引数を渡す場合もここで渡すこと。 そして、この要素を削除するときにはTemp->~T();でデストラクタを呼んでからfree(Temp);する。 こうすれば、コンストラクタ・デストラクタを持つクラスでもきちんと動くはず。 本格的にやるなら、std::vectorみたいにテンプレート引数でアロケータを取るようにする。 malloc→allocate new(void*)→construct ~T→destroy free→deallocate アロケータのメンバはこう対応する。
|

|