我认为这是我的第一篇文章,我不确定。
我有三个文件:queue.class.php,node.class.php和test.php,如下所示:
queue.class.php:
<?php
include('node.class.php');
class queue
{
public $head;
public $tail;
private $size;
//some methods (e.g __construct)
public function create_node($value){
$data = new Node($value);
return $data;
}
public function push($value){
//here I call create_node
}
//some more methods..
public function __destruct(){
if(!$this->queue_is_empty())
{
$node = $this->head->next;
while(!empty($node))
{
unset($this->head) // Here, doesn't free the memory.
$this->head = $node;
$node = $this->head->next;
}
unset($node);
}
unset($this->head, $this->tail, $this->size);
}
}
?>
node.class.php:
<?php
class Node
{
public $next;
public $previous;
private $data;
//some methods..
public function __destruct(){
unset($this->next, $this->previous, $this->data);
}
}
?>
在 test.php 中,我有以下内容:
<?php
include('queue.class.php');
$cola = new queue();
for($i = 0; $i < 1000; $i++){
$cola->push($i);
}
unset($cola) //free all the memory;
?>
我怀疑的是下一个:为什么当我在&#34; {&#34;}内呼叫unset(node)
时__destruct
(在queue.class.php中)是否释放节点占用的内存?但是如果我在node.class.php中创建一个新方法,请调用它,例如:delete_node()
(使用与__destruct
相同的代码)并将每个unset(node)
替换为:node->delete_node()
在queue.class.php中,是的,它可以工作。
我看过类似的主题,但我完全不了解
我希望理解我的解释,任何人都可以帮助我。感谢
PD:我是新人,我不知道怎么做降价