# Pointer Container Library

# Class `ptr_list`

A `ptr_list<T>` is a pointer container that uses an underlying `std:list<void*>` to store the pointers.

Hierarchy:

- reversible_ptr_container
  - ptr_sequence_adapter
    - ptr_vector
    - `ptr_list`
    - ptr_deque
    - ptr_array

Navigate:

- home
- reference

Synopsis:

    namespace boost
    {

        template
        <
            class T,
            class CloneAllocator = heap_clone_allocator,
            class Allocator      = std::allocator<void*>
        >
        class ptr_list : public ptr_sequence_adapter
                                <
                                    T,
                                    std::list<void*,Allocator>,
                                    CloneAllocator
                                >
        {

        public: // modifiers
            void                push_front( T* x );
            template< class U >
            void                push_front( std::auto_ptr<U> x );
            auto_type           pop_front();

        public: // list operations
            void  reverse();

        }; // class 'ptr_list'

    } // namespace 'boost'

# Semantics

## Semantics: modifiers

- `void push_front( T* x );`

  > - Requirements: `x != 0`
  > - Effects: Inserts the pointer into container and takes ownership of it
  > - Throws: `bad_pointer` if `x == 0`
  > - Exception safety: Strong guarantee

- `template< class U > void push_front( std::auto_ptr<U> x );`

  > - Effects: `push_front( x.release() );`

- `auto_type pop_front():`

  > - Requirements:`not empty()`
  > - Effects: Removes the first element in the container
  > - Postconditions: `size()` is one less
  > - Throws: `bad_ptr_container_operation` if `empty() == true`
  > - Exception safety: Strong guarantee

## Semantics: list operations

- `void reverse();`

  > - Effects: reverses the underlying sequence
  > - Throws: nothing

Copyright: | Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt).