Never Stop Questioning

C++ Tips

最終更新:

t-style

- view
メンバー限定 登録/ログイン
ここを編集
C++はとくに頭から抜けおちるのが早いので忘備録。

メモリの割り当て場所を変える

普通、スタック以外の領域にオブジェクトを生成するときはnew ObjectX(xyz)というような感じで書く。これに対し、任意の領域を割り当てるためには、new(Heap) ObjectX(xyz)と書く。ところが、std::vectorやstd::stringとかは内部でデフォルトのnewを実行する。こういった類のクラスに任意の領域を割り当てるためには、Allocatorクラスを用意する必要がある。省略しているが、Allocatorは、下記のような感じでallocate、deallocateというメンバ関数を定義する。ここに自前のメモリ管理処理を実装するとよい。
詳しくは ココ などを参照。


template <class T> 
class Allocator {
public:
  Allocator(MyGC* gc);
  pointer allocate(size_type n, const void* hint = 0);
  void deallocate(pointer p, size_type n);
  size_type max_size() ;
};
 

文字列にwchar_tを使う

いわゆるC++の文字列stringは、basic_string<char>のtypedefである。なので、basic_string<wchar_t>を使えばよい。なお、上述のAllocatorを自前で実装した場合は、basic_string< wchar_t, char_traits<wchar_t>, MyAllocator<wchar_t> >という感じで定義する。ちなみにwchar_tを標準出力するためにwcoutという関数が用意されている。
記事メニュー
目安箱バナー