ITK 中的智能指针与对象工厂演示-1

本文介绍了ITK中智能指针和对象工厂的结合使用,讲解了LightObject类及其引用计数方法,以及如何通过New()宏使用对象工厂创建对象。智能指针确保对象在适当时候被释放,而对象工厂则支持运行时版本替换。文中还提到了关键的代码段,包括智能指针、临界区类和回调函数的实现。
摘要由CSDN通过智能技术生成

关于智能指针,一般有两种常用的策略,参考:智能指针;有一篇原创的智能指针写得不错:一个智能实现的改进

关于对象工厂,看到一篇写的不错的博文:泛化对象工厂简述

     在 ITK 中将智能指针与对象工厂结合。除少部分非常小的类之外,其它类都继承自 LightObject 或者 Object(其中,Object 也继承自 LightObject)。LightObjec 是 ITK 中最基层的轻量极类,它提供了增加/减少引用计数(Register()/UnRegister())以及打印对象信息(Print())的方法。ITK 中每个类都提供如下标准定义与函数:

typedef    classname    Self;                                  //表示自身

typedef    parentClass  Superclass;                       //表示父类;LightObject 是最顶基类,无此项

typedef     SmartPointer<classname>    Pointer;     //将该对象的指针包装成智能指针,供用户使用。

typedef    SmartPointer<const classname> ConstPointer;  //const SmartPointer

static  Pointer New();   //除了 LightObject 以外,其余类都是以宏定义 itkNewMacro(Self); 自动生成。

     ITK中,用户创建对象实例还是通过 new 操作符,而是以统一的格式:ClassName::Pointer   pclass = ClassName::New(); 即可得到指向该类实例对象的智能指针 pclass。其中,New() 通过使用对象工厂创建对象实例。因为智能指针的构造函数是 public 的,所以如上语句得到的智能指针是在“栈”上创建的,而其指向的对象实例则是在“堆”上创建的,所以当智能指针离开作用域时,就会自动析构。此时并不直接删除其所指向的对象,而是减少其引用计数,并且判断引用计数是否为 0,如果为 0 才删除。用户操作得到的智能指针,无论是进行拷贝、还是赋值都不会创建该对象的副本,而是增加该对象的引用计数,这样便实现了指针指向的对象的共享。

     对象工厂使得用户能够在运行时进行版本替换,程序中我们进行了演示。

     下面给出 ITK 中智能指针(SmartPointer)、以及对象工厂(ObjectFactory)的代码,这里的代码基本都是直接来自 ITK 源码,作了适当的裁减,里面做了比较详细的注释,其实现非常简洁漂亮,很值得借鉴。对象工厂部分比较麻烦,需要仔细研究。

 

1.几个宏,用于在类中生成统一的 New()、CreateAnother()、GetNa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值