template<typename _Rep>
class VarPtr< _Rep >
Simple counted pointer with variable like const access.
On construction and assignment it behaves like a pointer. I.e. a 'const VarPtr<_Tp>'
is a '_Tp *const'
.
But accessing _Tp (via operator-> or operator*) its constness is propagated to _Tp. I.e. 'VarPtr<_Tp>'
behaves like a '_Tp *'
while a 'const VarPtr<_Tp>'
behaves as a 'const _Tp *'
.
Used in some classes to hide implementation data from the interface:
class Foo
{
class _Implementation;
VarPtr<_Implementation> _impl;
...
All a VarPtr does, is preventing accidential access to nonconst implementation data from const interface methods. If such access is intended is has to be expressed by using a cost_cast.