2010-06-12 18 views
0

J'écris une implémentation simple de liste chaînée linéaire en PHP. Ceci est essentiellement juste pour la pratique ... une partie d'un problème Project Euler. Je ne suis pas sûr si je devrais utiliser unset() pour aider à la récupération de place afin d'éviter les fuites de mémoire. Dois-je inclure un unset() pour la tête et la temp dans le destructeur de LLL?Comment utiliser unset() pour cette liste Linéaire Liée en PHP

Je comprends que je vais utiliser unset() pour supprimer des noeuds quand je veux, mais est unset() nécessaire pour le nettoyage général à tout moment?

La carte mémoire est-elle libérée une fois que le script se termine même si vous n'utilisez pas unset()?

I saw this SO question, mais je suis encore un peu flou. La réponse est-elle que vous n'avez simplement pas besoin d'utiliser unset() pour éviter toute sorte de fuite de mémoire associée à la création de références? J'utilise PHP 5 .. btw.

Unsetting references in PHP

PHP references tutorial

Voici le code - Je crée des références lorsque je crée $ temp et $ this-> tête à certains points dans la classe LLL:

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/>"; 
    } 
} 

Merci!

Répondre

2

Est-ce la carte de mémoire libérée une fois le script se termine même si vous n'utilisez pas unset()?

Oui - lorsqu'un script se termine, toutes les des ressources mémoire allouées par celle-ci sont libérées.