Adobe Source Libraries 1.49.0
A collection of C++ libraries.
Loading...
Searching...
No Matches
auto_resource< X, Traits > Class Template Reference

The template class auto_resource< X, Traits > provides similar functionality to unique_ptr for resources for which the pointer is opaque refered to by a non-pointer type. More...

#include <memory.hpp>

Public Types

typedef Traits traits_type
typedef traits_type::element_type element_type
typedef traits_type::pointer_type pointer_type

Public Member Functions

 auto_resource (pointer_type p=0) throw ()
 auto_resource (auto_resource &) throw ()
template<typename Y>
 auto_resource (const auto_resource< Y, typename traits_type::template rebind< Y >::other > &) throw ()
auto_resourceoperator= (auto_resource &) throw ()
template<typename Y>
auto_resourceoperator= (auto_resource< Y, typename traits_type::template rebind< Y >::other >) throw ()
 ~auto_resource () throw ()
auto_resourceoperator= (const clear_type *) throw ()
pointer_type get () const throw ()
pointer_type release () throw ()
void reset (pointer_type p=0) throw ()
 operator bool () const throw ()
bool operator! () const throw ()
template<typename Y>
auto_resource< X, Traits > & operator= (auto_resource< Y, typename traits_type::template rebind< Y >::other > x) throw ()

Detailed Description

template<typename X, class Traits = ptr_traits<X>>
class adobe::auto_resource< X, Traits >

Example:

// start_of_example
#include <adobe/memory.hpp>
#include <cassert>
#include <iostream>
int main() {
// Basic usage with automatic cleanup
{
adobe::auto_resource<int*> ptr(new int(42));
// Safe bool conversion allows checking if resource is valid
if (ptr) {
std::cout << "Value: " << *ptr.get() << std::endl; // prints "Value: 42"
}
// Resource is automatically deleted when ptr goes out of scope
}
// Transfer of ownership
{
adobe::auto_resource<int*> ptr1(new int(100));
adobe::auto_resource<int*> ptr2(ptr1); // ptr1 transfers ownership to ptr2
assert(!ptr1); // ptr1 is now empty
assert(ptr2); // ptr2 now owns the resource
assert(*ptr2.get() == 100);
}
// Using reset to change the managed resource
{
adobe::auto_resource<int*> ptr(new int(1));
ptr.reset(new int(2)); // Old resource deleted, new one managed
assert(*ptr.get() == 2);
ptr.reset(); // Release current resource, ptr becomes empty
assert(!ptr);
}
// Using release to transfer ownership manually
{
adobe::auto_resource<int*> ptr(new int(99));
int* raw_ptr = ptr.release(); // ptr no longer manages the resource
assert(!ptr);
assert(*raw_ptr == 99);
delete raw_ptr; // Must manually delete since ownership was transferred
}
return 0;
}
// end_of_example
The template class auto_resource< X, Traits > provides similar functionality to unique_ptr for resour...
Definition memory.hpp:205

Definition at line 205 of file memory.hpp.

Member Typedef Documentation

◆ traits_type

template<typename X, class Traits = ptr_traits<X>>
typedef Traits traits_type

Definition at line 210 of file memory.hpp.

◆ element_type

template<typename X, class Traits = ptr_traits<X>>
typedef traits_type::element_type element_type

Definition at line 211 of file memory.hpp.

◆ pointer_type

template<typename X, class Traits = ptr_traits<X>>
typedef traits_type::pointer_type pointer_type

Definition at line 212 of file memory.hpp.

Constructor & Destructor Documentation

◆ auto_resource() [1/3]

template<typename X, class Traits>
auto_resource ( pointer_type p = 0)
throw ( )
explicit

Definition at line 269 of file memory.hpp.

◆ auto_resource() [2/3]

template<typename X, class Traits>
auto_resource ( auto_resource< X, Traits > & x)
throw ( )

Definition at line 272 of file memory.hpp.

◆ auto_resource() [3/3]

template<typename X, class Traits>
template<typename Y>
auto_resource ( const auto_resource< Y, typename traits_type::template rebind< Y >::other > & x)
throw ( )

Definition at line 276 of file memory.hpp.

◆ ~auto_resource()

template<typename X, class Traits>
~auto_resource ( )
throw ( )

Definition at line 296 of file memory.hpp.

Member Function Documentation

◆ operator=() [1/4]

template<typename X, class Traits>
auto_resource< X, Traits > & operator= ( auto_resource< X, Traits > & x)
throw ( )

Definition at line 282 of file memory.hpp.

◆ operator=() [2/4]

template<typename X, class Traits = ptr_traits<X>>
template<typename Y>
auto_resource & operator= ( auto_resource< Y, typename traits_type::template rebind< Y >::other > )
throw ( )

◆ operator=() [3/4]

template<typename X, class Traits>
auto_resource< X, Traits > & operator= ( const clear_type * )
throw ( )

Definition at line 303 of file memory.hpp.

◆ get()

template<typename X, class Traits>
auto_resource< X, Traits >::pointer_type get ( ) const
throw ( )

Definition at line 311 of file memory.hpp.

◆ release()

template<typename X, class Traits>
auto_resource< X, Traits >::pointer_type release ( )
throw ( )

Definition at line 317 of file memory.hpp.

◆ reset()

template<typename X, class Traits>
void reset ( pointer_type p = 0)
throw ( )

Definition at line 324 of file memory.hpp.

◆ operator bool()

template<typename X, class Traits = ptr_traits<X>>
operator bool ( ) const
throw ( )

Definition at line 237 of file memory.hpp.

◆ operator!()

template<typename X, class Traits>
bool operator! ( ) const
throw ( )

Definition at line 334 of file memory.hpp.

◆ operator=() [4/4]

template<typename X, class Traits = ptr_traits<X>>
template<typename Y>
auto_resource< X, Traits > & operator= ( auto_resource< Y, typename traits_type::template rebind< Y >::other > x)
throw ( )

Definition at line 289 of file memory.hpp.