Auto_ptr
Smart pointer that deletes the instance it points to when going out of scope
Key Facts
Gyroscopic Couple: The rate of change of angular momentum () = (In the limit).- = Moment of Inertia.
- = Angular velocity
- = Angular velocity of precession.
Blaise Pascal (1623-1662) was a French mathematician, physicist, inventor, writer and Catholic philosopher.
Leonhard Euler (1707-1783) was a pioneering Swiss mathematician and physicist.
Definition
The auto_ptr class template is defined in the standard header <memory>, and in the nonstandard backward-compatibility header <memory.h>.template <class Type> class auto_ptr
Parameter | Description |
---|---|
Type | The type of object for which storage is being allocated or deallocated |
Description
The auto_ptr is provided by the C++ standard library as a kind of a smart pointer that helps to avoid resource leaks when exceptions are thrown. It manages an object obtained via new and deletes that object when auto_ptr itself is destroyed. It may be used to provide exception safety for dynamically-allocated objects, for passing ownership of dynamically-allocated objects into functions and for returning dynamically-allocated objects from functions. NOTE:- Copying an auto_ptr changes the object being copied by setting the contents to NULL
- auto_ptr objects are not guaranteed to work correctly with the STL containers
Member Functions
Function | Description |
---|---|
(constructor) | Creates a new auto_ptr object |
(destructor) | Destroys an auto_ptr and the managed object |
get | Obtains a pointer to the managed object |
operator* | Dereference object (accesses the managed object) |
operator-> | Dereference object member (accesses the managed object) |
release | Releases ownership of the managed object |
reset | Deallocate object pointed and set new value |
(conversion operators) | Conversion operators |
Example:
Example - Reset auto_ptr
Problem
The following example of program illustrates how to reset an auto_ptr.
Workings
#include <iostream> #include <memory> struct Resetter { Resetter() { std::cout << "Constructor" << std::endl; } ~Resetter() { std::cout << "Destructor" << std::endl; } }; int main() { std::auto_ptr<Resetter> pReset(new Resetter); pReset.reset(new Resetter); }
Solution
Output:
Constructor
Constructor
Destructor
Destructor
Constructor
Destructor
Destructor
References