// Copyright (C), 1998-2007, Beijing Tangent Engineering Software Co. Ltd. // = FileName: TDbObjectPointer.h // = Version: 8.5 // = Author: lgh // = Date: 2010-11-5 16:58:09 // = Description: ARX自带smart指针平台之间有差异,在此左一层封装。 // = Maintainers: #pragma once #include "commonRoad.h" #include template class TDbObjectPointer { public: TDbObjectPointer(void); ~TDbObjectPointer(void); const TDbObject *object() const; TDbObject *object(); const TDbObject * operator->() const; TDbObject * operator->(); Acad::ErrorStatus open(AcDbObjectId objId, AcDb::OpenMode mode, bool openErased = false); void close(); private: AcDbObjectPointer *m_pointerImp; }; template TDbObjectPointer::TDbObjectPointer(void) : m_pointerImp(NULL) { } template TDbObjectPointer::~TDbObjectPointer(void) { delete m_pointerImp; m_pointerImp = NULL; } template inline const TDbObject * TDbObjectPointer::object() const { ASSERT(m_pointerImp != NULL); ASSERT(m_pointerImp->openStatus() == Acad::eOk); return (*m_pointerImp).object(); } template inline TDbObject * TDbObjectPointer::object() { ASSERT(m_pointerImp != NULL); ASSERT(m_pointerImp->openStatus() == Acad::eOk); return (*m_pointerImp).object(); } template inline const TDbObject * TDbObjectPointer::operator->() const { return object(); } template inline TDbObject * TDbObjectPointer::operator->() { return object(); } template Acad::ErrorStatus TDbObjectPointer::open(AcDbObjectId objId, AcDb::OpenMode mode, bool openErased) { ASSERT(m_pointerImp == NULL); m_pointerImp = new AcDbObjectPointer(objId, mode, openErased); Acad::ErrorStatus eRet = m_pointerImp->openStatus(); if (m_pointerImp->openStatus() != Acad::eOk) { delete m_pointerImp; m_pointerImp = NULL; } return eRet; } template void TDbObjectPointer::close() { if (m_pointerImp != NULL) { delete m_pointerImp; m_pointerImp = NULL; } } #define AcDbObjectPointer TDbObjectPointer