• ベストアンサー

std::vectorのメモリ管理を自分でするには?

std::vectorのメモリ管理を自分でしたいですが、 いい情報が見つかりません。 どなたか、参考のサイトなど知りませんか? 検索してもなかなか良いのが見つからなくて、 困ってます。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

前回の質問のときにも回答しましたが、次のようにするのが一番簡単です。 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);  } }; あまり汎用的な設計ではありませんが、用途を限定するならこれで十分かと思います。 (コンストラクタは適当に必要なものを定義してください)

milkoX
質問者

お礼

なんかエラーが出まくりですが、 なんとかやってみます。 jactaさん、サイコーフォゥゥゥゥーオッケ~

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

もし、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/
milkoX
質問者

お礼

なんか、ふかそうで。。す。。 ありがとうございます。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

>文字のサイズが分からないため、 >配列は厳しいかなって。。 じゃstd::wstringでしょ。既出ですが、、 それが一番だと思います。 大変だとおっしゃいますが、それが一番楽な方法です。 wchar_t mem[6];としたのは 前の質問文からとってきただけです。

milkoX
質問者

お礼

ありがとうございます。 感覚的なものですが、std::wstringは wchar_t*に比べて遅い気がします。。。 気のせいでしょうか?

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

http://www.geocities.jp/ky_webid/cpp/library/028.html 前の質問を拝見しましたが std::vector<wchar_t*> を struct S{ wchar_t mem[6]; }; std::vector< S > vetorTemp; とでもしたほうが良いんじゃないですか?

milkoX
質問者

お礼

ご紹介ありがとうございます。 ありがたく参考にさせて頂きます。 > struct S{ > wchar_t mem[6]; > }; > std::vector< S > vetorTemp; > とでもしたほうが良いんじゃないですか? 大変興味があります。 理由を教えていただけますか? 良く分かってないです。。

milkoX
質問者

補足

意味がよくわからずのままですが、 とりあえずちょっとだけ補足です。 文字のサイズが分からないため、 配列は厳しいかなって。。 やりたいことは、ファイルから読み込んだ文字を 改行コードを区切りに、なんらかのデータ構造で保持したいです。 もし、なにか良い方法がありましたら、ご教授ください。 std::vectorのかわりにstd::listを使う予定もあります。 そのまえにメモリの開放でつまずいて。。

関連するQ&A