46 lines
824 B
C++
46 lines
824 B
C++
#ifndef CRYPTOPP_SMARTPTR_H
|
|
#define CRYPTOPP_SMARTPTR_H
|
|
|
|
#include "config.h"
|
|
|
|
namespace CryptoPP {
|
|
|
|
template<class T> class member_ptr
|
|
{
|
|
public:
|
|
explicit member_ptr(T *p = NULL) : m_p(p) {}
|
|
|
|
~member_ptr();
|
|
|
|
const T& operator*() const { return *m_p; }
|
|
T& operator*() { return *m_p; }
|
|
|
|
const T* operator->() const { return m_p; }
|
|
T* operator->() { return m_p; }
|
|
|
|
const T* get() const { return m_p; }
|
|
T* get() { return m_p; }
|
|
|
|
T* release()
|
|
{
|
|
T *old_p = m_p;
|
|
m_p = 0;
|
|
return old_p;
|
|
}
|
|
|
|
void reset(T *p = 0);
|
|
|
|
protected:
|
|
member_ptr(const member_ptr<T>& rhs); // copy not allowed
|
|
void operator=(const member_ptr<T>& rhs); // assignment not allowed
|
|
|
|
T *m_p;
|
|
};
|
|
|
|
template <class T> member_ptr<T>::~member_ptr() {delete m_p;}
|
|
template <class T> void member_ptr<T>::reset(T *p) {delete m_p; m_p = p;}
|
|
|
|
}
|
|
|
|
#endif
|