c++ templateとか

Java も generic 導入したんだからもう同じじゃね?」

「C++ は難しいから」と言う定説 - Life like a clown

「違うよ。全然、違うよ」

いい例ないかなぁ、と調べてたらWikipediaによい例が

ここらへんJavaGenericsではできないことだからなぁ。

C++側から見るとJavaGenericsは「コレクションクラス使用時にダウンキャスト不要になる」以上の意味があまりないです。

id:mollifier GCがないとか、コピーコンストラクタのあたりで挫折した。"自分で動的に領域を確保して管理する機会があまりない" って、new とか delete とかほとんど使わないって意味か。どうやってコーディングするんだ。

はてなブックマーク - 「C++ は難しいから」と言う定説 - Life like a clown

まずJavaの場合、

ArrayList<Integer> array = new ArrayList<Integer>(10);

意味的には「Integerインスタンスへの”参照”を10個作る」。要素となるインスタンスは別途newしなくちゃいけない。

次にC++の場合、

std::vector<Integer> vec(10);

意味的には「Integerインスタンスを10個作る」。

まぁ、結局はコレクションクラス内部でnew/deleteやっていて、コンパイル時にnew/delete呼びだすコードがさしこまれるわけだけど。
C++はコレクションクラスの定義側で与えられた型パラメータに対するインスタンスを生成できるので、インスタンスの生成や解放も含めて動的領域管理をライブラリにお任せしてしまうことができるわけです。

Javaの場合が「動的に作ったインスタンスをコレクションに管理してもらう」感じだとすると、C++の場合は「コレクションの管理下で動的にインスタンスを作ってもらう」感じです。