「Programming Perl」という本を読みましたが、かなり複雑なところがあります。それらの場所の 1 つは、第 12 章「オブジェクト」のセクション「インスタンス デストラクタ」です。このセクションは次のように述べています。
- Perl のオブジェクトは、それらへの参照がなくなると破棄されます。
DESTROY
クラスでメソッドを定義することにより、オブジェクトがリサイクルされる直前に制御を取得する機会があります。- Perl ではデストラクタが必要になることはめったにありませんが、一部のオブジェクトには、メモリ システムの外部にあるファイルハンドルやデータベース接続などがある場合があります。したがって、特別に出席する必要があります。
- Perl は階層的な破壊を行いません。
次に、私が理解できなかった段落があります:
これは、継承されたクラスにのみ適用されます。たとえば、より大きなハッシュの 1 つの値など、現在のオブジェクトに含まれているだけのオブジェクトは、自動的に解放され、破棄されます。これが、単なる集約 (「has-a」関係と呼ばれることもある) によるコンテナーシップが継承 (「is-a」関係) よりもクリーンで明確である理由の 1 つです。
私はそれが何を意味するのか理解できません。現在のオブジェクトに単純に含まれていないオブジェクトは、 自動的に解放および破棄されないということですか?
DESTROY
ガベージ コレクションで呼び出された a が最も近いものであり、唯一のものであることは知っています。DESTROY
インスタンスへの参照がない場合、他のオーバーライドされたメソッドは呼び出されません。しかし、私が理解しているように、インスタンスへの参照が別のオブジェクト内に配置されている場合、同じ動作が予想されます。
誰かが解釈してコード例を提供するのはとても楽しいでしょうか?
アップデート:
実際に私が探していたのは、継承されたクラスにのみ適用されるの説明でした。それが判明した言葉:
クラスのインスタンスがあり、そのメソッドが親クラスのDESTROY
メソッドをオーバーライドするよりもメソッドがある場合、それは問題のオブジェクトとの関係にあるDESTROY
オブジェクトには適用されません。has-a
それDESTROY
はオーバーライドされません
明確でない質問で申し訳ありませんが、英語と使用法に適していると思います。みんなありがとう。