C++ オブジェクト モデルに関するこの理論上の疑問を説明できる人はいますか? それは私の最近の試験で、私はそれに困惑しました。
質問: Java、C#、および Smalltalk の成功に注目して、C++ 標準委員会は言語のオブジェクト モデルに追加のレベルを追加することを決定しました。つまり、各クラスには、実行時に表現を持つメタクラスが必要です。
反対派は、これは言語の基本原則の 1 つに矛盾すると言います。どれの?説明。
反対派はまた、C++ には本格的なメタクラス レベルの機能の一部を可能にする追加の「ハーフレベル」があると主張しています。この「ハーフレベル」とは何ですか?また、その機能を利用できるのはどのようなクラスですか?
サポーターは勝利の議論を思いついた。レベルを追加すると、Mark & Sweep ガベージ コレクションの Mark フェーズがサポートされます (到達可能なすべてのオブジェクトが最初にマークされ、次に到達不能なオブジェクトが解放されます)。彼らの主張は、追加レベルのどの機能に依存していますか?
さらに、サポーターは別の議論を思いつきました。追加のレベルにより、ガベージ コレクション システムがなくても、仮想デストラクタが冗長になります。仮想デストラクタが必要な時期と理由、および追加のレベルによってその要件がどのように排除されるかを説明してください。