前言
用ARX智能指针打开对象,可以不在乎是否close,
但同时也要注意这个变量的作用域(生命周期)问题,
ARX智能指针,他的原理是利用类的析构造函数特性自动关闭对象.
这里的智能指针指的是AcDbObjectPointer这一类使用AcDbObjectPointerBase基类派生的类模板统称.
下面是打开示例.
void testOpen()
{
ads_point pt;
ads_name ent;
if (RTNORM != acedEntSel(NULL,ent,pt))
{
return;
}
AcDbObjectId objId;
acdbGetObjectId(objId,ent);
//使用ARX智能指针打开对象,实体类对象可以使用这种方式直接打开.
AcDbObjectPointer<AcDbBlockReference> pBlkRef(objId,AcDb::kForRead);
//判断是否打开成功
//注意ARX智能指针使用智能指针成员函数的时候是点符号"."不是指针符号"->"
if (Acad::eOk != pBlkRef.openStatus())
{
//根据情况做打开失败处理
acutPrintf(_T("\n打开对象失败!,错误码: %s"),acadErrorStatusText(pBlkRef.openStatus()));
return;
//continue;
//break;
}
//打开成功,可以使用对象的指针了注意是指针"->"符号.
AcGePoint3d ptInsert2 = pBlkRef->position();
//智能指针打开,close再是必须的处理.
//close可以多次执行,某些特殊情况,智能指针也需要手动close,所以不会出问题.
//下面示意创建一个新的对象.
//先声明pCircle对象
AcDbObjectPointer<AcDbCircle> pCircle;
//再创建实体对象,相当于new AcDbCircle
Ac