1. Perl
  2. 構文・文法
  3. here

デストラクタ - DESTROY

Perlはリファレンスカウント方式のGCを持つプログラミング言語です。オブジェクトが解放されるのは、リファレンスカウントが0になった場合です。

DESTROYというメソッドを実装することで、リファレンスカウントが0になるタイミングで、デストラクタを実行することができます。

sub DESTROY {
  # オブジェクトが解放されるときに実行される処理
  ...
}

ファイルハンドルをデストラクタでクローズする

たとえば、ファイルを表現するFileクラスがあったとします。Fileクラスはfhフィールドに、open関数でオープンしたファイルハンドルを保存しています。

これを、オブジェクトを開放するタイミングでclose関数を使ってクローズしたいとします。

そのような場合、次のようにデストラクタを記述します。

package File;
use Carp 'croak';

# コンストラクタ
sub new {
  my ($class, $file) = @_;
  
  my $self = {};
  open my $fh, '<', $file
    or croak "Can't open $file: $!";
  $self->{fh} = $fh;
  
  return bless $self, $class;
}

# デストラクタ
sub DESTROY {
  my $self = shift;
  print "DESTROY";
  close $self->{fh};
}

package main;

{
  my $file = File->new('a.txt');
}

参考: オブジェクト指向Carpモジュールスコープmainパッケージ

このスクリプトを実行すると「DESTROY」と表示されますが、これは、デストラクタが実行されていることを確認するために入れたものです。デストラクタが実行されており、ファイルハンドルはクローズされます。

デストラクタの主な用途

デストラクタが利用されることが多いのは、ファイルやデータベースなどの外部リソースをクローズするときです。Perlはオブジェクトが解放されるタイミングが明確なので、デストラクタ内でリソースのクローズ処理を書いておくことができます。

業務に役立つPerl

Perlテキスト処理のエッセンス

PerlでポータブルなLinuxファイル管理入門

ITエンジニアの求人情報など

 ITエンジニアの求人情報・Webサービス・ソフトウェア・スクールなどの情報。

システム開発のお問い合わせ