- ベストアンサー
std::vectorのメモリ管理を自分でするには?
std::vectorのメモリ管理を自分でしたいですが、 いい情報が見つかりません。 どなたか、参考のサイトなど知りませんか? 検索してもなかなか良いのが見つからなくて、 困ってます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
前回の質問のときにも回答しましたが、次のようにするのが一番簡単です。 template <class T, class Allocator = std::allocator<T> > class my_vector : public std::vector<T, Allocator> { public: ~my_vector() { std::for_each(this->begin(), this->end(), &std::free); } }; あまり汎用的な設計ではありませんが、用途を限定するならこれで十分かと思います。 (コンストラクタは適当に必要なものを定義してください)
その他の回答 (3)
- jacta
- ベストアンサー率26% (845/3158)
もし、Boost C++ Librariesを使えるのであれば、逃げ道がないこともありません。 最近リリースされたばかりのバージョン1.33.0では、boost::ptr_vectorクラステンプレートが提供されています。これがまさしく今回の目的に合致するものです。boost::ptr_listもあるので、十分に要求を満たすのではないでしょうか。 デフォルトではCloneAllocatorにheap_clone_allocatorが指定されているので、この部分をmallocとfreeを使った方式のものを自作して置き換える必要があります。特に、allocate_clone関数の実装はちょっと工夫が必要なのでがんばってください。
- 参考URL:
- http://www.boost.org/
お礼
なんか、ふかそうで。。す。。 ありがとうございます。
- sha-girl
- ベストアンサー率52% (430/816)
>文字のサイズが分からないため、 >配列は厳しいかなって。。 じゃstd::wstringでしょ。既出ですが、、 それが一番だと思います。 大変だとおっしゃいますが、それが一番楽な方法です。 wchar_t mem[6];としたのは 前の質問文からとってきただけです。
お礼
ありがとうございます。 感覚的なものですが、std::wstringは wchar_t*に比べて遅い気がします。。。 気のせいでしょうか?
- sha-girl
- ベストアンサー率52% (430/816)
http://www.geocities.jp/ky_webid/cpp/library/028.html 前の質問を拝見しましたが std::vector<wchar_t*> を struct S{ wchar_t mem[6]; }; std::vector< S > vetorTemp; とでもしたほうが良いんじゃないですか?
お礼
ご紹介ありがとうございます。 ありがたく参考にさせて頂きます。 > struct S{ > wchar_t mem[6]; > }; > std::vector< S > vetorTemp; > とでもしたほうが良いんじゃないですか? 大変興味があります。 理由を教えていただけますか? 良く分かってないです。。
補足
意味がよくわからずのままですが、 とりあえずちょっとだけ補足です。 文字のサイズが分からないため、 配列は厳しいかなって。。 やりたいことは、ファイルから読み込んだ文字を 改行コードを区切りに、なんらかのデータ構造で保持したいです。 もし、なにか良い方法がありましたら、ご教授ください。 std::vectorのかわりにstd::listを使う予定もあります。 そのまえにメモリの開放でつまずいて。。
お礼
なんかエラーが出まくりですが、 なんとかやってみます。 jactaさん、サイコーフォゥゥゥゥーオッケ~