タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

placement newに関するbabydaemonsのブックマーク (2)

  • C++ Labyrinth

    placement new と delete (2) -- placement delete ところで、placement new があるのならば、placement delete というのもあるのだろうか? 答としては、「ある」。 しかし、関数としての operator delete は定義できるけれども、 new 演算子のように、それを呼び出す delete 演算子の構文はサポートされていない。つまり、 class Foo { public: static void *operator new( size_t size, T& t ); static void operator delete( void *p, T& t ); }; のような placement delete 関数を定義することはできても、 それを T t; Foo *p = new( t ) Foo; … delet

  • C Labyrinth new コスト

    placement new と delete (1) -- placement new オブジェクトを動的に確保したり解放したりする場合は new / delete 演算子を使うわけだが、 デフォルトの new / delete 演算子を呼ぶと、 結局のところ malloc とか free に落ちることになるので、 ヒープ領域の管理コストがかかることになる。 たまに比較的大きなオブジェクトを生成するのに new を呼ぶ分にはそのコストも無視できるだろうが、サイズの小さい (たとえば、4バイトとか) オブジェクトを何百万回も生成 / 破棄するようなプログラムだと、 その時間的空間的な管理コストは無視できないほど大きくなる。 そのような場合に使われるのが、placement new (配置 new) というテクニックである。 次のようにふつうに new 演算子を使うと、 X *x = new

  • 1