1. ホーム
  2. c++

[解決済み】なぜC++にはガベージコレクタがないのですか?

2022-03-31 22:47:17

質問

この質問は、まずガベージコレクションの是非を問うものではありません。 Bjarne Stroustrupが、C++はいつかはガベージコレクタを持つことになるだろうと発言していることを知っているからです。

そうはいっても、なぜ追加されないのでしょうか? C++用のガベージコレクタはすでにいくつかあります。 これは単に「言うは易く行うは難し」なのでしょうか? あるいは、追加されない(C++11でも追加されない)他の理由があるのでしょうか?

クロスリンクです。

念のためですが、C++が最初に作られたときにガベージコレクタがなかった理由は理解しています。 なぜコレクタを追加できないのかが不思議です。

解決方法は?

暗黙のガベージコレクションを追加することは可能でしたが、カットされるには至りませんでした。 おそらく、実装の複雑さだけでなく、人々の一般的なコンセンサスが十分に早く得られなかったことが原因でしょう。

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は彼が望むほどには備わっていなかったと述べています。