まず第一に、ガベージ コレクションのメリットについてこの質問をしているわけではありません。この質問をする主な理由は、Bjarne Stroustrup が、C++ にはいずれガベージ コレクターが導入されるだろうと言っていることを知っているからです。
そうは言っても、なぜ追加されないのでしょうか? C++ にはすでにガベージ コレクターがいくつかあります。これは単に「言うのは簡単だが実行するのは難しい」タイプのことなのでしょうか? それとも、追加されていない (そして C++11 では追加されない) 理由は他にもあるのでしょうか?
クロスリンク:
念のため言っておきますが、C++ が最初に作成されたときにガベージ コレクターがなかった理由は理解しています。なぜコレクターを追加できないのか疑問に思っています。
ベストアンサー1
暗黙的なガベージ コレクションを追加することもできましたが、実現しませんでした。おそらく、実装の複雑さだけでなく、人々が十分な速さで一般的な合意に達することができなかったことが原因です。
Bjarne Stroustrup 氏自身の言葉:
オプションで有効にできるガベージ コレクターが C++0x の一部になることを期待していましたが、技術的な問題が多すぎて、そのようなコレクターが言語の残りの部分とどのように統合されるか (提供される場合) の詳細な仕様だけで我慢するしかありませんでした。基本的にすべての C++0x 機能の場合と同様に、実験的な実装が存在します。
このトピックについては良い議論があるここ。
総括:
C++ は非常に強力で、ほとんど何でもできます。このため、パフォーマンスに影響を与える可能性のある多くのことを自動的に押し付けることはありません。ガベージ コレクションは、スマート ポインタ (参照カウントを持つポインタをラップし、参照カウントが 0 になると自動的に削除されるオブジェクト) を使用すると簡単に実装できます。
C++ は、ガベージ コレクションを持たない競合相手を念頭に置いて構築されました。C や他の言語と比較して C++ が批判をかわす必要があった主な懸念事項は効率性でした。
ガベージコレクションには 2 種類あります...
明示的なガベージコレクション:
C++0x には shared_ptr で作成されたポインタによるガベージコレクションがあります。
使いたいなら使えますし、使いたくないなら強制的に使う必要はありません。
C++0x より前のバージョンでは、boost:shared_ptr が存在し、同じ目的を果たします。
暗黙的なガベージコレクション:
ただし、透過的なガベージ コレクションはありません。ただし、将来の C++ 仕様では焦点となるでしょう。
Tr1 に暗黙的なガベージ コレクションがないのはなぜですか?
C++0x の tr1 には多くの機能があるはずでしたが、Bjarne Stroustrup は以前のインタビューで、tr1 には彼が望んでいたほどの機能がないと述べています。