0

PHPで単純な線形リンクリストの実装を書いています。これは基本的に練習用です...プロジェクトオイラー問題の一部です。メモリリークを回避するためにガベージコレクションを支援するためにunset()を使用する必要があるかどうかはわかりません。LLLのデストラクタにheadとtempのunset()を含める必要がありますか?

必要なときにノードを削除するためにunset()を使用することを理解していますが、いつでも一般的なクリーンアップにunset()が必要ですか?

unset()を使用しなくても、スクリプトが終了するとメモリマップは解放されますか?

このSOの質問を見ましたが、まだ少しわかりません。参照の作成に関連するメモリリークを回避するためにunset()を使用する必要がないという答えはありますか?

私はPHP5を使用しています。

PHPでの参照の設定解除

PHPリファレンスチュートリアル

コードは次のとおりです。LLLクラスの特定のポイントで$tempと$this->headを作成するときに、参照を作成しています。

class Node
{
    public $data;
    public $next;
}
class LLL
{
    // The first node
    private $head;
    public function __construct()
    {
        $this->head = NULL;
    }
    public function insertFirst($data)
    {
        if (!$this->head)
        {
            // Create the head
            $this->head = new Node;
            $temp =& $this->head;
            $temp->data = $data;
            $temp->next = NULL;                     
        } else
        {
            // Add a node, and make it the new head.
            $temp = new Node;        
            $temp->next = $this->head;
            $temp->data = $data;
            $this->head =& $temp;
        }
    }
    public function showAll()
    {
        echo "The linear linked list:<br/>&nbsp;&nbsp;";
        if ($this->head)
        {               
            $temp =& $this->head;
            do
            {
                echo $temp->data . " ";
            } while ($temp =& $temp->next);
        } else
        {
            echo "is empty.";
        }
        echo "<br/>";
    }
}

ありがとう!

4

1 に答える 1

2

unset()を使用しなくても、スクリプトが終了するとメモリマップは解放されますか?

はい-スクリプトが終了すると、スクリプトによって割り当てられたすべてのメモリリソースが解放されます。

于 2010-06-12T04:59:38.587 に答える