46 #ifndef __K2SmartPtr__ 47 #define __K2SmartPtr__ 49 #include <boost/config.hpp> 53 #include <boost/utility.hpp> 71 template<
typename T>
class scoped_ptr : boost::noncopyable {
76 typedef T element_type;
94 void reset( T* p=0 ) {
if ( ptr != p ) {
delete ptr; ptr = p; } }
102 T*
release( ) { T* ret = ptr; ptr = nil;
return ret; }
125 T*
get()
const {
return ptr; }
128 bool operator!() const
129 {
return get() == 0; }
131 inline friend bool operator==(
const Self& lhs,
133 {
return lhs.get() == rhs; }
135 inline friend bool operator==(
const T* lhs,
137 {
return rhs == lhs; }
139 inline friend bool operator!=(
const Self& lhs,
141 {
return !(lhs == rhs); }
143 inline friend bool operator!=(
const T* lhs,
145 {
return rhs != lhs; }
152 void operator delete(
void*);
157 operator Tester*()
const 159 if (!*
this)
return 0;
164 operator void*()
const {
191 typedef T element_type;
209 void reset( T* p=0 ) {
if ( ptr != p ) {
delete [] ptr; ptr=p;} }
215 T*
get()
const {
return ptr; }
223 T*
release( ) { T* ret = ptr; ptr = nil;
return ret; }
245 typedef T element_type;
273 if ( px == p )
return;
274 if (--*pn == 0) {
delete [] px; }
282 T*
get()
const {
return px; }
283 T& operator[](std::size_t i)
const {
return px[i]; }
302 { std::swap(px,other.px); std::swap(pn,other.pn); }
304 bool operator!() const
305 {
return get() == 0; }
307 inline friend bool operator==(
const Self& lhs,
309 {
return lhs.get() == rhs; }
311 inline friend bool operator==(
const T* lhs,
313 {
return rhs == lhs; }
315 inline friend bool operator!=(
const Self& lhs,
317 {
return !(lhs == rhs); }
319 inline friend bool operator!=(
const T* lhs,
321 {
return rhs != lhs; }
328 void operator delete(
void*);
333 operator Tester*()
const 335 if (!*
this)
return 0;
340 operator void*()
const {
348 void dispose() {
if (--*pn == 0) {
delete [] px;
delete pn; } }
353 inline bool operator==(
const shared_array<T>& a,
const shared_array<T>& b)
354 {
return a.get() == b.get(); }
357 inline bool operator!=(
const shared_array<T>& a,
const shared_array<T>& b)
358 {
return a.get() != b.get(); }
366 #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION 381 struct less< K2::shared_array<T> >
382 : function<bool(K2::shared_array<T>, K2::shared_array<T>) >
386 {
return less<T*>()(a.get(),b.get()); }
391 #endif // ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION 393 #endif // __K2SmartPtr__