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。

posted on   HRDK  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义



点击右上角即可分享
微信分享提示