私は最近this rantに来ました。C++ 'new'演算子に関する問題?
私はかなりの記事で述べたポイントのいくつかを理解していない:
- 著者は
delete
対delete[]
の小さな迷惑を言及し、それが実際には必要であると主張しているようだ(コンパイラのために)、ソリューションを提供することはありません。私は何か見落としてますか?機能f()
の「専門アロケータ」セクションにおいて - 、問題で割り当てを交換して解決することができると思われる:(省略アラインメント)
// if you're going to the trouble to implement an entire Arena for memory,
// making an arena_ptr won't be much work. basically the same as an auto_ptr,
// except that it knows which arena to deallocate from when destructed.
arena_ptr<char> string(a); string.allocate(80);
// or: arena_ptr<char> string; string.allocate(a, 80);
arena_ptr<int> intp(a); intp.allocate();
// or: arena_ptr<int> intp; intp.allocate(a);
arena_ptr<foo> fp(a); fp.allocate();
// or: arena_ptr<foo>; fp.allocate(a);
// use templates in 'arena.allocate(...)' to determine that foo has
// a constructor which needs to be called. do something similar
// for destructors in '~arena_ptr()'.
過負荷の危険」で::新しい演算子[] '、作者はnew(p) obj[10]
をしようとします。代わりに(はるかに少ない曖昧)なぜこの:
obj *p = (obj *)special_malloc(sizeof(obj[10]));
for(int i = 0; i < 10; ++i, ++p)
new(p) obj;
'C++でメモリ割り当てをデバッグ'。ここで議論することはできません。
全体記事は重要コンストラクタとデストラクタカスタムメモリ管理スキームに位置してクラスを中心に展開しているようです。それは役に立つかもしれませんが、私はそれについて議論することはできませんが、それは共通性にかなり制限されています。
基本的に、新しい配置クラスとクラスごとの割り当て子があります。これらのアプローチでは解決できない問題は何ですか?
また、私はちょうど太くて狂っている場合は、あなたの理想的なC++では、置き換えられるものはoperator new
でしょうか?必要に応じて構文を作り直してください。という理想があります。
B-b-b-しかし決定論的ファイナライザは、プログラミングの本質、心臓、魂です! –
私は返信するつもりでしたが、私はそれをもっと考えればするほど、その文をそのまま残したいと思うほど、賞賛されます。 –
おそらく、他人への警告として。 –