Loading...
Searching...
No Matches
casacore::PtrHolder< T > Class Template Reference
casa package (libcasa_casa) » Utilities_module

More...

`#include <PtrHolder.h>`

## Public Member Functions

| PtrHolder ()
| The default constructor uses a null pointer.
| PtrHolder (T *pointer, Bool isCArray=False)
| Construct a PtrHolder from a pointer which MUST have been allocated from new, since the destructor will call delete on it.
| ~PtrHolder ()
void | set (T *pointer, Bool isCarray=False, Bool deleteCurrentPtr=True)
| Set the pointer to a new value.
void | clear (Bool deleteCurrentPtr=True)
| Set the current pointer to null; if deletePtr is True (the default), then the current pointer is deleted first.
T * | ptr ()
| Release the pointer for use.
const T * | ptr () const
| operator T* ()
| Attempt to automatically release a pointer when required.
| operator T* () const

## Detailed Description

template<class T>
class casacore::PtrHolder< T >

Hold and delete pointers not deleted by object destructors

### Intended use:

Public interface

### Review Status

Reviewed By:
  troberts
Date Reviewed:
  1995/07/29
Test programs:
  tPtrHolder

### Prerequisite

- module Exceptions

### Synopsis

PtrHolders hold allocated pointers which should be deleted when an exception is thrown. Exceptions only call destructors of objects. Thus, for example, storage allocated in a global function (outside of an object)is not deleted. A PtrHolder solves this problem: it merely holds the pointer and deletes it when it is destroyed itself, e.g. when an exception is thrown or when the function exits normally.

### Example

void func(Int *ptr); // some other function that takes a pointer
//..\.
// True below means it's an array, False (the default) would mean
// a singleton object.
PtrHolder<Int> iholder(new Int[10000], True);
func(iholder); // converts automatically to ptr
(iholder.ptr() + 5) = 11; // use pointer explicitly
some_function_that_throws_exception(); // pointer is deleted
casacore::PtrHolder::PtrHolder
PtrHolder()
The default constructor uses a null pointer.
casacore::PtrHolder::ptr
T * ptr()
Release the pointer for use.
Definition PtrHolder.h:116
casacore::Int
int Int
Definition aipstype.h:48
casacore::True
const Bool True
Definition aipstype.h:41

### Motivation

Avoid leaks when throwing/catching exceptions.

### To Do

- Use the autoptr class from the Standard Library

Definition at line 78 of file PtrHolder.h.

## Constructor & Destructor Documentation

## PtrHolder() [1/2]

template<class T>

casacore::PtrHolder< T >::PtrHolder | ( |  | ) |

The default constructor uses a null pointer.

## PtrHolder() [2/2]

template<class T>

casacore::PtrHolder< T >::PtrHolder | ( | T * | pointer,
|  | Bool | isCArray = False )

Construct a PtrHolder from a pointer which MUST have been allocated from new, since the destructor will call delete on it.

If the pointer is to an array, i.e. allocated with operator new[], then isCarray should be set to True. (This parameter is required because C-arrays need to be deleted with delete[].)

After the pointer is placed into the holder, the user should not manually delete the pointer; the PtrHolder object will do that, unless set() or clear() is called with deleteCurrentPtr set to False. The pointer must also only be put into one holder to avoid double deletion.

References casacore::False, and casacore::isCArray().

## ~PtrHolder()

template<class T>

casacore::PtrHolder< T >::~PtrHolder | ( |  | ) |

## Member Function Documentation

## clear()

template<class T>

void casacore::PtrHolder< T >::clear | ( | Bool | deleteCurrentPtr = True | ) |

Set the current pointer to null; if deletePtr is True (the default), then the current pointer is deleted first.

References casacore::True.

## operator T*() [1/2]

template<class T>

casacore::PtrHolder< T >::operator T* | ( |  | ) |

inline

Attempt to automatically release a pointer when required.

If the compiler can't figure it out, you can use the ptr() member function directly.

Definition at line 123 of file PtrHolder.h.

References casacore::ptr_p.

## operator T*() [2/2]

template<class T>

casacore::PtrHolder< T >::operator T* | ( |  | ) | const

inline

Definition at line 124 of file PtrHolder.h.

References casacore::ptr_p.

## ptr() [1/2]

template<class T>

T * casacore::PtrHolder< T >::ptr | ( |  | ) |

inline

Release the pointer for use.

Definition at line 116 of file PtrHolder.h.

References casacore::ptr_p.

## ptr() [2/2]

template<class T>

const T * casacore::PtrHolder< T >::ptr | ( |  | ) | const

inline

Definition at line 117 of file PtrHolder.h.

References casacore::ptr_p.

## set()

template<class T>

void casacore::PtrHolder< T >::set | ( | T * | pointer,
|  | Bool | isCarray = False,
|  | Bool | deleteCurrentPtr = True )

Set the pointer to a new value.

If deleteCurrentPtr is True (the default), then delete the existing pointer first. If isCarray is True, then the new pointer is assumed to have been allocated with new[].

References casacore::False, and casacore::True.

The documentation for this class was generated from the following file:

- casa/Utilities/PtrHolder.h