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 が呼ばれてるっぽい。 まあ仕様上未定義ってだけだよね。

まあ newmalloc 混在させてはいけないとかだと C++ から C のライブラリ 使うと死ぬ訳で………。

しかし getline(3) とかは内部で多分 malloc するんだけど,glibc のじゃない カスタムのメモリアロケータ(tcmalloc とか)を使う場合は呼ぶと危険な関数になるってことだろうか……。 そうだとしたら不便。

参考