greenplumn CAutoRef 源码
greenplumn CAutoRef 代码
文件路径:/src/backend/gporca/libgpos/include/gpos/common/CAutoRef.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2009 Greenplum, Inc.
//
// @filename:
// CAutoRef.h
//
// @doc:
// Basic auto pointer for ref-counted objects
//---------------------------------------------------------------------------
#ifndef GPOS_CAutoRef_H
#define GPOS_CAutoRef_H
#include "gpos/base.h"
#include "gpos/common/CAutoP.h"
#include "gpos/common/CRefCount.h"
namespace gpos
{
//---------------------------------------------------------------------------
// @class:
// CAutoRef
//
// @doc:
// Wrapps pointer of type T which is a subtype of CRefCount
//
//---------------------------------------------------------------------------
template <class T>
class CAutoRef : public CAutoP<T>
{
private:
public:
CAutoRef<T>(const CAutoRef &) = delete;
// ctor
explicit CAutoRef<T>() : CAutoP<T>()
{
}
// ctor
explicit CAutoRef<T>(T *object) : CAutoP<T>(object)
{
}
~CAutoRef() override;
// simple assignment
CAutoRef<T> const &
operator=(T *object)
{
CAutoP<T>::m_object = object;
return *this;
}
}; // class CAutoRef
//---------------------------------------------------------------------------
// @function:
// CAutoRef::~CAutoRef
//
// @doc:
// Dtor
//
//---------------------------------------------------------------------------
template <class T>
CAutoRef<T>::~CAutoRef()
{
if (nullptr != CAutoP<T>::m_object)
{
reinterpret_cast<CRefCount *>(CAutoP<T>::m_object)->Release();
}
// null out pointer before ~CAutoP() gets called
CAutoP<T>::m_object = nullptr;
}
} // namespace gpos
#endif // !GPOS_CAutoRef_H
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
7、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦