6 #ifndef CRYPTOPP_SMARTPTR_H 7 #define CRYPTOPP_SMARTPTR_H 39 explicit member_ptr(T *p = NULLPTR) : m_p(p) {}
43 const T& operator*()
const {
return *m_p; }
44 T& operator*() {
return *m_p; }
46 const T* operator->()
const {
return m_p; }
47 T* operator->() {
return m_p; }
49 const T*
get()
const {
return m_p; }
50 T*
get() {
return m_p; }
86 return (!this->m_p && !rhs.m_p) || (this->m_p && rhs.m_p && *this->m_p == *rhs.m_p);
93 this->m_p = rhs.m_p ?
new T(*rhs.m_p) : NULLPTR;
116 T *old_p = this->m_p;
117 this->m_p = rhs.m_p ? rhs.m_p->Clone() : NULLPTR;
137 const T& operator*()
const {
return *m_p; }
138 T& operator*() {
return *m_p; }
140 const T* operator->()
const {
return m_p; }
141 T* operator->() {
return get(); }
143 const T*
get()
const {
return m_p; }
146 void attach(
const T &p);
158 m_p->m_referenceCount = 1;
165 m_p->m_referenceCount++;
170 if (m_p && --m_p->m_referenceCount == 0)
176 if (m_p && --m_p->m_referenceCount == 0)
178 if (r.m_referenceCount == 0)
181 m_p->m_referenceCount = 1;
185 m_p =
const_cast<T *
>(&r);
186 m_p->m_referenceCount++;
192 if (m_p && m_p->m_referenceCount > 1)
194 T *temp = m_p->clone();
195 m_p->m_referenceCount--;
197 m_p->m_referenceCount = 1;
206 if (m_p && --m_p->m_referenceCount == 0)
210 m_p->m_referenceCount++;
226 : m_size(size), m_ptr(new
member_ptr<T>[size]) {}
228 {
delete [] this->m_ptr;}
235 size_t size()
const {
return this->m_size;}
236 void resize(
size_t newSize)
239 for (
size_t i=0; i<this->m_size && i<newSize; i++)
240 newPtr[i].reset(this->m_ptr[i].release());
241 delete [] this->m_ptr;
242 this->m_size = newSize;
243 this->m_ptr = newPtr;
Library configuration file.
Pointer that overloads operator ->
Reference counted pointer.
Manages resources for a single object.
A pointer which can be copied and cloned.
Manages resources for an array of objects.
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
vector_member_ptrs(size_t size=0)
Construct an arry of T.
Crypto++ library namespace.