#pragma once // Trivial implementation of boost::scoped_ptr, in a way that I prefer. template class scoped_ptr { public: scoped_ptr() : ptr_(0) {} scoped_ptr(T *p) : ptr_(p) {} ~scoped_ptr() { delete ptr_; } void reset(T *p) { delete ptr_; ptr_ = p; } T *release() { T *p = ptr_; ptr_ = 0; return p; } T *operator->() { return ptr_; } const T *operator->() const { return ptr_; } const T *get() const { return ptr_; } T *get() { return ptr_; } private: scoped_ptr(const scoped_ptr &other); void operator=(const scoped_ptr &other); T *ptr_; };