首页 > 其他分享 >AcDbObjectPointerBase

AcDbObjectPointerBase

时间:2022-12-23 10:00:13浏览次数:28  
标签:构造函数 对象 AcDbObjectPointerBase 派生类 打开 指针

AcDbObjectPointerBase是一组模板类的基类,这些模板类简化了AcDbObjects指针的内存管理以及打开和关闭AcDbObjects。

这些类提供了在创建和销毁时自动打开和关闭AcDbObjects。构造函数提供打开对象所需的参数,而析构函数则关闭对象。在对象的生命周期内,客户端使用operator->()操作打开的对象。

AcDbObjectPointerBase提供了在给定对象id的情况下打开和关闭对象的基本服务,并定义了使用从中派生的智能指针的基本契约。派生类为从AcDbObject派生的各种类型的打开对象提供了真正的接口。派生类通常提供额外的构造函数,这些构造函数知道打开对象的特定方式。

通常不直接使用AcDbObjectPointerBase,但可以使用它来定义派生类,以添加知道如何以替代形式打开从AcDbObject派生的对象的构造函数。模板参数T_OBJECT应该是AcDbObject或从AcDbObject派生的类,可以通过acdbOpenObject()打开。

所有派生类必须遵守并执行以下契约。

1.禁止复制和转让。派生类还必须通过将这些函数声明为private来禁止复制和赋值。这些类包含一个指向实际对象的指针,因此不能使用编译器提供的默认构造函数。复制和赋值对于你是否拥有对象或者仅仅拥有指针没有明显的语义。您可以传递AcDbObjectIds并使用这些类来简化通过ID打开对象。

2.客户端不能使用close()成员函数关闭对象本身。析构函数将关闭对象。这些指针类意味着在指针对象的生命周期内保持对象打开。注意,upgradeOpen()可能会失败,但与指针类的语义兼容。升级失败将使对象以其原始模式打开。这种契约的一个后果是,将operator->()返回的指针传递给其他函数,如果其他函数通过指针关闭对象,则可能会导致意想不到的问题。

3.派生类应该提供以下构造函数:

4.在使用operator->()之前,所有客户端都将调用openStatus()成员函数来确定对象是否已成功打开。

AcDbObjectPointerBase提供的默认构造函数将打开状态设置为Acad::eNullObjectPointer。

标签:构造函数,对象,AcDbObjectPointerBase,派生类,打开,指针
From: https://www.cnblogs.com/HRDK-CADeveloper/p/17000089.html

相关文章