学习ARX,在智能指针的地方遇到一些问题.
第一个问题就是类型转换的问题.用AcDbEntityPointer类型打开一个实体后,需要调用AcDbCurve类的函数,
如果是用AcDbEntity* 的指针方式打开,可以用AcDbCurve* pCur = AcDbCurve::cast(pEnt)方式转换.
现在用智能指针打开的话,这个转换方式就会出错,
E:\MYWORK\FirstArx\ExtensionData.cpp(38) : error C2664: 'cast' : cannot convert parameter 1 from 'class AcDbObjectPointer<class AcDbEntity>' to 'const class AcRxObject *'
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called请高手指教,是不是这个地方不能用智能指针?还有一个问题就是当调用函数和被调用函数中都需要打开同一个实体时,如果用一般指针,可以在调用被调用函数前关闭实体,用智能指针的话是自动关闭实体的,这里就会出现重复打开的问题,从而出错,这个地方是不是也不适合用智能指针?

解决方案 »

  1.   

    不能直接转
    AcDbObjectPointer.object()
      

  2.   

    我建议你还是先看些智能指针的大概实现方式,有个理论指导。先理解了才是运用。
    盲目乱用只会让你更迷茫。
    像这个问题就是你缺乏一个基本的理解。
    AcDbCurve* pCur = AcDbCurve::cast(pEnt)
    是对象指针的安全转换,
    而智能指针是有个外包装类的,如果没有实现相应的操作符,肯定是不能直接转的,你需要拿到包装的对象指针才可以转。第二个问题是你用的不对吧。还是上面说的,先理解了再用。