Object ARX 智能指针初探
时间:2010-09-01 来源:David Hsu
指针宛如C++这把瑞士军刀中最锋利的刀刃,但凡锋利的刀刃在披荆斩棘的同时也会伤到自己,但是借助一些使用的技巧,我们可以在使用其强大特性的同时,确保代码的健壮。
对于智能指针大家一定不会觉得陌生,这是我们这些懒人的救命稻草,随便搜索一下都会有大量的介绍,我在此就不在赘述。
Object ARX的指针使用方法较之普通指针而言有其特殊的地方,尤其是close函数的调用让人蛋疼,在刚刚接触Object ARX的日子,一遍遍地检查是否关闭了所有该关闭的指针也浪费了许多宝贵的时间。时间久了,便萌生了编写适用于ARX的智能指针的想法,一旦使用完了便自动关闭,同时可以像指针一样简单易用,不过,ARX已经具备了这样功能的类,AcDbObjectPointer系列的智能指针为我们提供了完备的功能,当然,其也有些许不足的地方,将在以后继续讨论。
AcDbObjectPointer继承自AcDbObjectPointerBase,那么,先看一下AcDbObjectPointerBase的类定义:

1 template<class T_OBJECT>
2 class AcDbObjectPointerBase
3 {
4 public:
5 AcDbObjectPointerBase();
6 virtual ~AcDbObjectPointerBase();
7
8 const T_OBJECT * object() const;
9 T_OBJECT * object();
10
11 const T_OBJECT * operator->() const;
12 T_OBJECT * operator->();
13
14 Acad::ErrorStatus openStatus() const;
15
16 Acad::ErrorStatus acquire(T_OBJECT *& pObjToAcquire);
17 Acad::ErrorStatus release(T_OBJECT *& pReleasedObj);
18
19 Acad::ErrorStatus create();
20
21 protected:
22 AcDbObjectPointerBase(AcDbObjectId objId,
23 AcDb::OpenMode mode,
24 bool openErased);
25
26 T_OBJECT * m_ptr;
27 Acad::ErrorStatus m_status;
28
29 private:
30 // Copy and assignment prohibited.
31 AcDbObjectPointerBase(AcDbObjectPointerBase & pObject);
32 AcDbObjectPointerBase& operator=(AcDbObjectPointerBase & pObject);
33
34 Acad::ErrorStatus closeInternal();
35 };
相关阅读 更多 +