ICU 74.2: common/unicode/uobject.h File Reference

ICU 74.2 74.2

Data Structures | Namespaces | Macros | Typedefs
uobject.h File Reference

C++ API: Common ICU base class UObject. More...

`#include "unicode/utypes.h"`
`#include "unicode/platform.h"`

Go to the source code of this file.

## Data Structures
class | icu::UMemory
| UMemory is the common ICU base class. More...
class | icu::UObject
| UObject is the common ICU "boilerplate" class. More...

## Namespaces
namespace | icu
| File coll.h.

## Macros
#define | U_NO_THROW noexcept
| Since ICU 64, use noexcept instead.
#define | UOBJECT_DEFINE_RTTI_IMPLEMENTATION(myClass)
| This is a simple macro to add ICU RTTI to an ICU object implementation.
#define | UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(myClass)
| This macro adds ICU RTTI to an ICU abstract class implementation.

## Typedefs
typedef void * | UClassID
| UClassID is used to identify classes without using the compiler's RTTI.

## Detailed Description

C++ API: Common ICU base class UObject.

Definition in file uobject.h.

## Macro Definition Documentation

## ◆ U_NO_THROW

#define U_NO_THROW noexcept

Since ICU 64, use noexcept instead.

Previously, define this to define the throw() specification so certain functions do not throw any exceptions

UMemory operator new methods should have the throw() specification appended to them, so that the compiler adds the additional nullptr check before calling constructors. Without, if `operator new` returns nullptr the constructor is still called, and if the constructor references member data, (which it typically does), the result is a segmentation violation.

Stable:
  ICU 4.2. Since ICU 64, Use noexcept instead. See ICU-20422.

Definition at line 49 of file uobject.h.

## ◆ UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION

#define UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION | ( |  | myClass | ) |

Value:
UClassID U_EXPORT2 myClass::getStaticClassID() { \
static char classID = 0; \
return (UClassID)&classID; \
}
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:96

This macro adds ICU RTTI to an ICU abstract class implementation.

This macro should be invoked in *.cpp files. The corresponding header should declare getStaticClassID.

Parameters

  myClass | The name of the class that needs RTTI defined.

Internal:
  Do not use. This API is for internal use only.

Definition at line 312 of file uobject.h.

## ◆ UOBJECT_DEFINE_RTTI_IMPLEMENTATION

#define UOBJECT_DEFINE_RTTI_IMPLEMENTATION | ( |  | myClass | ) |

Value:
UClassID U_EXPORT2 myClass::getStaticClassID() { \
static char classID = 0; \
return (UClassID)&classID; \
} \
UClassID myClass::getDynamicClassID() const \
{ return myClass::getStaticClassID(); }

This is a simple macro to add ICU RTTI to an ICU object implementation.

This does not go into the header. This should only be used in *.cpp files.

Parameters

  myClass | The name of the class that needs RTTI defined.

Internal:
  Do not use. This API is for internal use only.

Definition at line 295 of file uobject.h.

## Typedef Documentation

## ◆ UClassID

typedef void* UClassID

UClassID is used to identify classes without using the compiler's RTTI.

This was used before C++ compilers consistently supported RTTI. ICU 4.6 requires compiler RTTI to be turned on.

Each class hierarchy which needs to implement polymorphic clone() or operator==() defines two methods, described in detail below. UClassID values can be compared using operator==(). Nothing else should be done with them.

  In class hierarchies that implement "poor man's RTTI", each concrete subclass implements getDynamicClassID() in the same way:

class Derived {
public:
virtual UClassID getDynamicClassID() const
{ return Derived::getStaticClassID(); }
}

Each concrete class implements getStaticClassID() as well, which allows clients to test for a specific type.

class Derived {
public:
static UClassID U_EXPORT2 getStaticClassID();
private:
static char fgClassID;
}
// In Derived.cpp:
UClassID Derived::getStaticClassID()
{ return (UClassID)&Derived::fgClassID; }
char Derived::fgClassID = 0; // Value is irrelevant

Stable:
  ICU 2.0

Definition at line 96 of file uobject.h.