コンパイラレベルだと吐き出されるコードと直結することになる。
ライブラリレベルなら文字通り責任はライブラリにあることになる。

たとえば仮想関数がvtableで実装されてるのはコンパイラレベル。

で、コンパイラが司るところの言語仕様の枠から見ると、
専用の例外が用意されてたりlibstdc++のリンクを必要とする
newやdeleteは、ある意味鬼子。

これはnewやdeleteの実装が処理系によって大きく変わってくることを意味したりもするので、
使用に際してライブラリの癖…メモリ確保の効率とか確保のために必要なCPU時間とか…
にまで気を回さなければならない状況も考えられないわけじゃない。

自前でnewやdeleteを作ろうとした場合、<new>の実装内容に首を突っ込まなければ
ならない場合なんてのも往々にしてある。

C++を使う上での一般的な知識の枠の外を要求されることも無いではないあたり、
パラノイア的に粘着するなら、newもdeleteも標準ライブラリ扱いの項目でこそあれ、
組み込み予約語の枠に収まってるのは少々おかしいくらいだぞ、と。

まあ、そんな毒にも薬にもならない話。