【发布时间】:2015-08-12 17:21:02
【问题描述】:
我的问题是关于 Perl 如何在内部管理对象的数据。
在 Perl 中创建对象时,新的子例程通常会返回对祝福对象的引用。
以如下代码为例:
# Create a new object
my $object = Object->new(%data1);
# Create a new object with the same variable
$object = Object->new(%data2);
从第一次调用 new 开始,我们创建了一个 $object,它引用了一些祝福的 %data1
视觉表现:
“\”表示引用。
$object ════> \{bless %data1}
这在内存中看起来如下:
“&”表示地址
MEMORY:
----------------------------------
&{bless %data1} ════> bless %data1
然后在第二次调用 new 时,$object 的值被更改为引用其他一些受祝福的 %data2
视觉表现:
$object ══/ /══> \{bless %data1} # The connection to %data1 is broken
║
╚═══════════> \{bless %data2}
现在的记忆应该是这样的:
MEMORY:
----------------------------------
&{bless %data1} ════> bless %data1
&{bless %data2} ════> bless %data2
现在的问题是$object 不再存储引用\{bless %data1}、地址&{bless %data1},并且存储在该地址的任何数据都将永远丢失。再也无法通过脚本访问存储在该位置的数据了。
我的问题是。 . .一旦对该数据的引用永远丢失,Perl 是否足够聪明地删除存储在 &{bless %data1} 中的数据,或者 Perl 是否会将这些数据保留在内存中可能导致内存泄漏?
【问题讨论】:
标签: perl oop memory-management memory-leaks reference