localpointer.h File Reference

C++ API: "Smart pointers" for use with and in ICU4C C++ code. More...

#include "unicode/utypes.h"

Go to the source code of this file.

Data Structures

class  icu::LocalPointerBase< T >
 "Smart pointer" base class; do not use directly: use LocalPointer etc. More...
class  icu::LocalPointer< T >
 "Smart pointer" class, deletes objects via the standard C++ delete operator. More...
class  icu::LocalArray< T >
 "Smart pointer" class, deletes objects via the C++ array delete[] operator. More...

Namespaces

namespace  icu
 

File coll.h.


Defines

#define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction)
 "Smart pointer" definition macro, deletes objects via the closeFunction.

Detailed Description

C++ API: "Smart pointers" for use with and in ICU4C C++ code.

These classes are inspired by

but none of those provide for all of the goals for ICU smart pointers:

For details see http://site.icu-project.org/design/cpp/scoped_ptr

Definition in file localpointer.h.


Define Documentation

#define U_DEFINE_LOCAL_OPEN_POINTER ( LocalPointerClassName,
Type,
closeFunction   ) 
Value:
class LocalPointerClassName : public LocalPointerBase<Type> { \
    public: \
        using LocalPointerBase<Type>::operator*; \
        using LocalPointerBase<Type>::operator->; \
        explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase<Type>(p) {} \
        ~LocalPointerClassName() { closeFunction(ptr); } \
        LocalPointerClassName &moveFrom(LocalPointerClassName &src) U_NOEXCEPT { \
            closeFunction(ptr); \
            LocalPointerBase<Type>::ptr=src.ptr; \
            src.ptr=NULL; \
            return *this; \
        } \
        void swap(LocalPointerClassName &other) U_NOEXCEPT { \
            Type *temp=LocalPointerBase<Type>::ptr; \
            LocalPointerBase<Type>::ptr=other.ptr; \
            other.ptr=temp; \
        } \
        friend inline void swap(LocalPointerClassName &p1, LocalPointerClassName &p2) U_NOEXCEPT { \
            p1.swap(p2); \
        } \
        void adoptInstead(Type *p) { \
            closeFunction(ptr); \
            ptr=p; \
        } \
    }

"Smart pointer" definition macro, deletes objects via the closeFunction.

Defines a subclass of LocalPointerBase which works just like LocalPointer<Type> except that this subclass will use the closeFunction rather than the C++ delete operator.

Requirement: The closeFunction must tolerate a NULL pointer. (We could add a NULL check here but it is normally redundant.)

Usage example:

 LocalUCaseMapPointer csm(ucasemap_open(localeID, options, &errorCode));
 utf8OutLength=ucasemap_utf8ToLower(csm.getAlias(),
     utf8Out, (int32_t)sizeof(utf8Out),
     utf8In, utf8InLength, &errorCode);
 if(U_FAILURE(errorCode)) { return; }  // no need to explicitly delete the UCaseMap
See also:
LocalPointerBase
LocalPointer
Stable:
ICU 4.4

Definition at line 539 of file localpointer.h.


Generated on 24 Jul 2019 for ICU 57.1 by  doxygen 1.6.1