相关疑难解决方法(0)

使用Scalar :: Util的弱化会导致无效的引用问题吗?

有关背景信息,请参阅此相关问题.

注意:当我说"无效引用"时,我指的是指向无数据的引用.


假设我们有以下包含循环引用的数据结构:

       +-----------------------------------------------------+
       |                                                     |
       +-->+============+    +==========+                    |
           [ Reference ----->[ Blessed  ]                    |
$parent -->+============+    [ Hash     ]                    |
                             [          ]   +==========+     |
                             [ children --->[ Array    ]     |
                             [          ]   [          ]     |
                             +==========+   [ 0: ---------+  |
                                            [          ]  |  |
                                            +==========+  |  |
                                                          |  |
       +--------------------------------------------------+  |
       |                                                     |
       +-->+============+    +==========+                    |
           [ Reference ----->[ Blessed  ]                    |
$child --->+============+    [ Hash     ]                    |
                             [          ]                    |
                             [ parent: ----------------------+
                             [          ] …
Run Code Online (Sandbox Code Playgroud)

oop perl memory-management reference cyclic-reference

3
推荐指数
2
解决办法
152
查看次数

覆盖对象时的Perl内存管理

我的问题是关于Perl如何在内部管理对象的数据.

在Perl中创建对象时,新子例程通常会返回对受祝福对象的引用.

以下面的代码为例:

# Create a new object
my $object = Object->new(%data1);

# Create a new object with the same variable
$object = Object->new(%data2);
Run Code Online (Sandbox Code Playgroud)

从第一次打电话到new我们创建一个$object引用一些祝福的人%data1

视觉表现:

"\"表示引用.

$object ????> \{bless %data1}
Run Code Online (Sandbox Code Playgroud)

这在内存中看起来如下:

"&"表示地址

MEMORY:
----------------------------------
&{bless %data1} ????> bless %data1
Run Code Online (Sandbox Code Playgroud)

然后用第二次调用new的值$object改为引用其他一些祝福%data2

视觉表现:

$object ??/ /??> \{bless %data1}  # The connection to %data1 is broken
   ?
   ????????????> \{bless %data2}
Run Code Online (Sandbox Code Playgroud)

现在内存看起来像这样:

MEMORY:
----------------------------------
&{bless %data1} ????> bless %data1
&{bless %data2} ????> bless …
Run Code Online (Sandbox Code Playgroud)

oop perl memory-leaks memory-management reference

2
推荐指数
1
解决办法
193
查看次数