Понимание newRV_inc и newRV_noinc

Пытаясь иметь дело со ссылками на уровне C, я не могу понять разницу (на практике) между newRV_inc и newRV_noinc . С этой целью я скопировал этот небольшой пример Inline :: C .

#!/usr/bin/env perl

use strict;
use warnings;

use Devel::Peek 'SvREFCNT';

my $arrayref_inc = make_arrayref_inc();
print "inc: ", SvREFCNT($arrayref_inc), "\n";

my $arrayref_noinc = make_arrayref_noinc();
print "noinc: ", SvREFCNT($arrayref_noinc), "\n";

use Inline C => <<'END_C';
SV* make_arrayref_inc () {
  AV * array = newAV();
  SV * arrayref = newRV_inc((SV *)array);

  return arrayref;
}

SV* make_arrayref_noinc () {
  AV * array = newAV();
  SV * arrayref = newRV_noinc((SV *)array);

  return arrayref;
}
END_C

дает:

inc: 1
noinc: 1

Может ли кто-нибудь помочь мне понять, почему этот код ведет себя таким образом?

5
задан Ed. 28 January 2019 в 07:59
поделиться