当类具有同一类字段时,它如何不是stackoverflowException



如果类T类具有T型字段,那么如何没有stackoverflow异常?因为如果您创建一个t的对象,则其中将有另一个t对象,并且t对象又有其自己的t对象,以及宽广的和不断。

好吧,我知道这个问题非常令人困惑,这可能不是回答这些类型问题的网站,但我很好奇。

编辑:

好吧,这是一个示例,可以使自己更清楚我的意思:

class T {
    T t = new T();
}

因此,如果创建一个t的对象,您还将创建另一个t的对象,而t又有其自己的t对象,依此类推。我要问的是,为什么会创建无限的T链?

,为什么不是堆叠式流

我不知道这是否有帮助。

通常,在大多数(全部?)编程语言中,具有复杂数据项的属性的对象不会将这些完整数据项存储在其分配的空间中,而是为指针分配足够的空间或引用该对象。使用perl术语:

package T;
use Moo;
use Types::Standard -all;
has ref_to_t => (is => 'ro', isa => InstanceOf['T']); # notice not "required"
1;

然后使用:

my $obj1 = T->new;
my $obj2 = T->new(ref_to_t => undef);
my $obj3 = T->new(ref_to_t => $obj2);

这表明了三种方式不会导致世界末日:

  • $obj1具有(因为这是Perl的Moo工作方式)根本没有为ref_to_t分配的空间。
  • $obj2已分配空间,但仅足以引用另一个对象,即无定义。
  • $obj3也已分配空间,也仅用于参考。

最新更新