STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
_Ref_count_base Class Referenceabstract
Inheritance diagram for _Ref_count_base:
_Ref_count< _Ty > _Ref_count_del< _Ty, _Dx > _Ref_count_del_alloc< _Ty, _Dx, _Alloc > _Ref_count_obj< _Ty > _Ref_count_obj_alloc< _Ty, _Alloc >

Public Member Functions

virtual ~_Ref_count_base () _NOEXCEPT
 
bool _Incref_nz ()
 
void _Incref ()
 
void _Incwref ()
 
void _Decref ()
 
void _Decwref ()
 
long _Use_count () const _NOEXCEPT
 
bool _Expired () const _NOEXCEPT
 
virtual void_Get_deleter (const type_info &) const _NOEXCEPT
 

Protected Member Functions

 _Ref_count_base ()
 

Private Member Functions

virtual void _Destroy () _NOEXCEPT=0
 
virtual void _Delete_this () _NOEXCEPT=0
 

Private Attributes

_Atomic_counter_t _Uses
 
_Atomic_counter_t _Weaks
 

Constructor & Destructor Documentation

_Ref_count_base::_Ref_count_base ( )
inlineprotected
485  : _Uses(1), _Weaks(1) // non-atomic initializations
486  { // construct
487  }
_Atomic_counter_t _Uses
Definition: memory:480
_Atomic_counter_t _Weaks
Definition: memory:481
virtual _Ref_count_base::~_Ref_count_base ( )
inlinevirtual
491  { // ensure that derived classes can be destroyed properly
492  }

Member Function Documentation

void _Ref_count_base::_Decref ( )
inline
534  { // decrement use count
535  if (_MT_DECR(_Uses) == 0)
536  { // destroy managed resource, decrement weak reference count
537  _Destroy();
538  _Decwref();
539  }
540  }
_Atomic_counter_t _Uses
Definition: memory:480
virtual void _Destroy() _NOEXCEPT=0
#define _MT_DECR(x)
Definition: xmemory0:1264
void _Decwref()
Definition: memory:542
void _Ref_count_base::_Decwref ( )
inline
543  { // decrement weak reference count
544  if (_MT_DECR(_Weaks) == 0)
545  _Delete_this();
546  }
_Atomic_counter_t _Weaks
Definition: memory:481
#define _MT_DECR(x)
Definition: xmemory0:1264
virtual void _Delete_this() _NOEXCEPT=0
virtual void _Ref_count_base::_Delete_this ( )
privatepure virtual
virtual void _Ref_count_base::_Destroy ( )
privatepure virtual
bool _Ref_count_base::_Expired ( ) const
inline
554  { // return true if _Uses == 0
555  return (_Use_count() == 0);
556  }
long _Use_count() const _NOEXCEPT
Definition: memory:548
virtual void* _Ref_count_base::_Get_deleter ( const type_info ) const
inlinevirtual

Reimplemented in _Ref_count_del_alloc< _Ty, _Dx, _Alloc >, and _Ref_count_del< _Ty, _Dx >.

559  { // return address of deleter object
560  return (0);
561  }
void _Ref_count_base::_Incref ( )
inline
524  { // increment use count
525  _MT_INCR(_Uses);
526  }
_Atomic_counter_t _Uses
Definition: memory:480
#define _MT_INCR(x)
Definition: xmemory0:1262
bool _Ref_count_base::_Incref_nz ( )
inline
495  { // increment use count if not zero, return true if successful
496  for (; ; )
497  { // loop until state is known
498  #if _USE_INTERLOCKED_REFCOUNTING
500  static_cast<volatile _Atomic_counter_t&>(_Uses);
501 
502  if (_Count == 0)
503  return (false);
504 
505  if (static_cast<_Atomic_integral_t>(_InterlockedCompareExchange(
506  reinterpret_cast<volatile long *>(&_Uses),
507  _Count + 1, _Count)) == _Count)
508  return (true);
509 
510  #else /* _USE_INTERLOCKED_REFCOUNTING */
511  _Atomic_integral_t _Count =
513 
514  if (_Count == 0)
515  return (false);
516 
518  return (true);
519  #endif /* _USE_INTERLOCKED_REFCOUNTING */
520  }
521  }
_Atomic_counter_t _Uses
Definition: memory:480
_Atomic_integral_t _Compare_increment_atomic_counter(_Atomic_counter_t &_Counter, _Atomic_integral_t _Expected)
Definition: xatomic.h:2483
_Uint4_t _Atomic_integral_t
Definition: xatomic0.h:26
_Diff _Count
Definition: algorithm:1941
_Atomic_integral_t _Load_atomic_counter(_Atomic_counter_t &_Counter)
Definition: xatomic.h:2468
long __cdecl _InterlockedCompareExchange(long volatile *, long, long)
_Atomic_integral_t _Atomic_counter_t
Definition: xatomic0.h:47
void _Ref_count_base::_Incwref ( )
inline
529  { // increment weak reference count
530  _MT_INCR(_Weaks);
531  }
#define _MT_INCR(x)
Definition: xmemory0:1262
_Atomic_counter_t _Weaks
Definition: memory:481
long _Ref_count_base::_Use_count ( ) const
inline
549  { // return use count
550  return (_Get_atomic_count(_Uses));
551  }
_Atomic_counter_t _Uses
Definition: memory:480
_Atomic_integral_t _Get_atomic_count(const _Atomic_counter_t &_Counter)
Definition: xatomic0.h:50

Member Data Documentation

_Atomic_counter_t _Ref_count_base::_Uses
private
_Atomic_counter_t _Ref_count_base::_Weaks
private

The documentation for this class was generated from the following file: