new と malloc(3) を混在させていいのか
という議論が ここ
にあったけど(2007 年……古い……!),malloc(3)
で取ってきたメモリを
delete
(もしくは delete[]
)に渡してはいけないとか,new
で取ってきた
メモリを free(3)
に渡してはいけないのに malloc(3)
を読んだり new
したり
しても問題ないってのはなんか奇妙な話な気がしてきた。
(普通に C++ 書いていれば malloc には用がないけど)。
なぜかというと,どちらのメモリも malloc(3)
が管理していないと,
同じ領域が別の用途で使われてしまうということになるので。
で,new
で取ってきたのも malloc
が管理しているんだったら,
delete
しても free(3)
に渡されるだけだから,
デストラクタとかがなければ問題にならない気がする。
と思って gdb でアタッチして試したら実際に malloc
が呼ばれてるっぽい。
まあ仕様上未定義ってだけだよね。
まあ new
と malloc
混在させてはいけないとかだと C++ から C のライブラリ
使うと死ぬ訳で………。
しかし getline(3)
とかは内部で多分 malloc するんだけど,glibc のじゃない
カスタムのメモリアロケータ(tcmalloc とか)を使う場合は呼ぶと危険な関数になるってことだろうか……。
そうだとしたら不便。