在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1461|回复: 2

[求助] 下面的代码 animal_cage所指的最后一个对象chicken_cage 会一直存在吧?

[复制链接]
发表于 2018-5-5 06:31:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 american007 于 2018-5-8 14:58 编辑

看systemverilog 验证测试平台编写指南  这本书上所说:当一个对象没有句柄指向它的时候,则该对象被析构。
,下面代码中chicken_cage不会再赋值给其他对象,    chicken_cage会一直指向该对象,因此chicken_cage所指的最后一个对象会一直存在而不会北析构 ?
virtual class animal;
   protected int age=-1;
   protected string name;

   function new(int a, string n);
      age = a;
      name = n;
   endfunction : new

   function int get_age();
        return age;
   endfunction : get_age

   function string get_name();
      return name;
   endfunction : get_name

   pure virtual function void make_sound();


endclass : animal


class lion extends animal;

   protected string        name;

   function new(int age, string n);
      super.new(age, n);
   endfunction : new

   function void make_sound();
      $display ("The lion, %s, says Roar", get_name());
   endfunction : make_sound


endclass : lion


class chicken extends animal;

   function new(int age, string n);
      super.new(age, n);
   endfunction : new

   function void make_sound();
      $display ("The Chicken, %s, says BECAWW", get_name());
   endfunction : make_sound



endclass : chicken
        

class animal_cage #(type T);

   protected T cage[$];

   function void cage_animal(T l);
      cage.push_back(l);
   endfunction : cage_animal

   function void list_animals();
      $display("Animals in cage:");
      foreach (cage)
        $display(cage.get_name());
   endfunction : list_animals

endclass : animal_cage

   

module top;
   
   lion   lion_h;
   chicken  chicken_h;

   animal_cage #(lion)  lion_cage;
   animal_cage #(chicken) chicken_cage;
  
   

   initial begin
      lion_cage = new();
      lion_h = new(15, "Mustafa");
      lion_cage.cage_animal(lion_h);
      lion_h = new(15, "Simba");
      lion_cage.cage_animal(lion_h);

      chicken_cage = new();
      chicken_h = new(1, "Little Red Hen");
      chicken_cage.cage_animal(chicken_h);

      chicken_h = new(1, "Lady Clucksalot");
      chicken_cage.cage_animal(chicken_h);
   

      $display("-- Lions --");
      lion_cage.list_animals();
      $display("-- Chickens --");
      chicken_cage.list_animals();
   end

endmodule : top
发表于 2018-5-6 21:29:43 | 显示全部楼层
这段代码看上去好熟悉,像uvm primer上面的;
不是很明白楼主的意思;这个chiken_cage本身就是一个animal_cage类型的对象啊;
 楼主| 发表于 2018-5-8 14:52:08 | 显示全部楼层
本帖最后由 american007 于 2018-5-9 10:09 编辑

verilog建立的仿真case不是动态的,只要占用了就会一直占用内存;而systemverilog的面向对象编程是动态申请内存,对象的任务结束了会被析构,释放出内心,那么对象何时才会被析构呢??
<<systemverilog 验证测试平台编写指南>>  这本书上说:当一个对象没有句柄指向它的时候,则该对象被析构  -------------这句话对吗?
上面的代码 最后一个chiken_cage 句柄被赋值后,一直指向同一个对象,这个对象是不是永远不会被析构呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-22 05:25 , Processed in 0.016409 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表