2014-12-06 70 views
2

以下代码(第二行)的含义是什么,其中内部类uvm_resource_pool定义,实例(对象)rp被创建?在类的endclass定义中,类的对象是什么意思?

class uvm_resource_pool; 

    static local uvm_resource_pool rp = get(); 

    // Function: get 
    // 
    // Returns the singleton handle to the resource pool 

    static function uvm_resource_pool get(); 
    if(rp == null) 
     rp = new(); 
    return rp; 
    endfunction 

回答

4

这是怎么Singleton模式 SystemVerilog中被编码。单例模式是一种OOP技术,它确保只构造一个类类型的一个实例。构造函数以及对象rp被声明为本地。检索类型为uvm_resource_pool的对象实例的唯一方法是调用静态方法get(),该方法第一次调用它,但接下来它将返回rp。这也是如何解决静态类的初始化命令失败的。你永远不会直接引用一个静态变量,你总是使用一个get()方法在第一个引用上构造它。

+0

是的,我明白静态方法的重要性,它确保只创建第一个时间对象,然后在同一个对象上进行引用。 但我的问题是如何一个对象(uvm_resource_pool rp)可以创建它自己的类定义? – 2014-12-07 04:09:01

+0

意味着编译rp时,编译器将如何知道uvm_resource_pool包含什么,因为它尚未完全编译类定义? – 2014-12-07 04:19:58

+0

所有的编译器需要知道的是''uvm_resource_pool'是一种声明'rp'的类型,它确实知道这是因为编译器已经看到'class uvm_resource_pool'。这工作就像一个前锋typedef会。记住'rp'是一个类变量,它将保存对一个对象的引用,它本身不是一个对象。 – 2014-12-07 05:34:42

相关问题