diff --git a/icu4c/source/i18n/rbt.cpp b/icu4c/source/i18n/rbt.cpp index 323522bcced..82b0002a69e 100644 --- a/icu4c/source/i18n/rbt.cpp +++ b/icu4c/source/i18n/rbt.cpp @@ -30,7 +30,8 @@ RuleBasedTransliterator::RuleBasedTransliterator(const UnicodeString& ID, const TransliterationRuleData* theData, UnicodeFilter* adoptedFilter) : Transliterator(ID, adoptedFilter), - data(theData), isDataOwned(FALSE) {} + data((TransliterationRuleData*)theData), // cast away const + isDataOwned(FALSE) {} /** * Copy constructor. Since the data object is immutable, we can share @@ -38,12 +39,18 @@ RuleBasedTransliterator::RuleBasedTransliterator(const UnicodeString& ID, */ RuleBasedTransliterator::RuleBasedTransliterator( const RuleBasedTransliterator& other) : - Transliterator(other), data(other.data) {} + Transliterator(other), data(other.data) { + // TODO: Finish this -- implement with correct data ownership handling +} /** * Destructor. We do NOT own the data object, so we do not delete it. */ -RuleBasedTransliterator::~RuleBasedTransliterator() {} +RuleBasedTransliterator::~RuleBasedTransliterator() { + if (isDataOwned) { + delete data; + } +} Transliterator* // Covariant return NOT ALLOWED (for portability) RuleBasedTransliterator::clone() const { diff --git a/icu4c/source/i18n/rbt.h b/icu4c/source/i18n/rbt.h index c6b69c451cd..a55de1297f9 100644 --- a/icu4c/source/i18n/rbt.h +++ b/icu4c/source/i18n/rbt.h @@ -204,7 +204,7 @@ class U_I18N_API RuleBasedTransliterator : public Transliterator { /** * If true, we own the data object and must delete it. */ - bool_t dataIsOwned; + bool_t isDataOwned; public: