| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: sharedptr.h
- // Purpose: interface of wxSharedPtr<T>
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- A smart pointer with non-intrusive reference counting.
- It is modelled after @c boost::shared_ptr<> and can be used with STL
- containers and wxVector<T> unlike @c std::auto_ptr<> and wxScopedPtr<T>.
- @library{wxbase}
- @category{smartpointers}
- @see wxScopedPtr<T>, wxWeakRef<T>, wxObjectDataPtr<T>
- */
- template<typename T>
- class wxSharedPtr<T>
- {
- public:
- /**
- Constructor.
- Creates shared pointer from the raw pointer @a ptr and takes ownership
- of it.
- */
- wxEXPLICIT wxSharedPtr(T* ptr = NULL);
- /**
- Constructor.
- Creates shared pointer from the raw pointer @a ptr and deleter @a d
- and takes ownership of it.
- @param ptr The raw pointer.
- @param d Deleter - a functor that is called instead of delete to
- free the @a ptr raw pointer when its reference count drops to
- zero.
- @since 3.0
- */
- template<typename Deleter>
- wxEXPLICIT wxSharedPtr(T* ptr, Deleter d);
- /**
- Copy constructor.
- */
- wxSharedPtr(const wxSharedPtr<T>& tocopy);
- /**
- Destructor.
- */
- ~wxSharedPtr();
- /**
- Returns pointer to its object or @NULL.
- */
- T* get() const;
- /**
- Conversion to a boolean expression (in a variant which is not
- convertible to anything but a boolean expression).
- If this class contains a valid pointer it will return @true, if it contains
- a @NULL pointer it will return @false.
- */
- operator unspecified_bool_type() const;
- /**
- Returns a reference to the object.
- If the internal pointer is @NULL this method will cause an assert in debug mode.
- */
- T operator*() const;
- /**
- Smart pointer member access. Returns pointer to its object.
- If the internal pointer is @NULL this method will cause an assert in debug mode.
- */
- T* operator->() const;
- /**
- Assignment operator.
- Releases any previously held pointer and creates a reference to @a ptr.
- */
- wxSharedPtr<T>& operator=(T* ptr);
- /**
- Assignment operator.
- Releases any previously held pointer and creates a reference to the
- same object as @a topcopy.
- */
- wxSharedPtr<T>& operator=(const wxSharedPtr<T>& tocopy);
- /**
- Reset pointer to @a ptr.
- If the reference count of the previously owned pointer was 1 it will be deleted.
- */
- void reset(T* ptr = NULL);
- /**
- Reset pointer to @a ptr.
- If the reference count of the previously owned pointer was 1 it will be deleted.
- @param ptr The new raw pointer.
- @param d Deleter - a functor that is called instead of delete to
- free the @a ptr raw pointer when its reference count drops to
- zero.
- @since 3.0
- */
- template<typename Deleter>
- void reset(T* ptr, Deleter d);
- /**
- Returns @true if this is the only pointer pointing to its object.
- */
- bool unique() const;
- /**
- Returns the number of pointers pointing to its object.
- */
- long use_count() const;
- };
|