Index: source/i18n/L10n.cpp =================================================================== --- source/i18n/L10n.cpp +++ source/i18n/L10n.cpp @@ -116,19 +116,28 @@ * parsing. * @return ICU date formatter. */ -icu::DateFormat* CreateDateTimeInstance(const L10n::DateTimeType& type, const icu::DateFormat::EStyle& style, const icu::Locale& locale) +std::unique_ptr CreateDateTimeInstance(const L10n::DateTimeType& type, const icu::DateFormat::EStyle& style, const icu::Locale& locale) { switch (type) { case L10n::Date: - return icu::SimpleDateFormat::createDateInstance(style, locale); + return std::unique_ptr + { + icu::SimpleDateFormat::createDateInstance(style, locale) + }; case L10n::Time: - return icu::SimpleDateFormat::createTimeInstance(style, locale); + return std::unique_ptr + { + icu::SimpleDateFormat::createTimeInstance(style, locale) + }; case L10n::DateTime: default: - return icu::SimpleDateFormat::createDateTimeInstance(style, style, locale); + return std::unique_ptr + { + icu::SimpleDateFormat::createDateTimeInstance(style, style, locale) + }; } } @@ -446,24 +455,21 @@ icu::UnicodeString utf16DateTimeString = icu::UnicodeString::fromUTF8(dateTimeString.c_str()); icu::UnicodeString utf16DateTimeFormat = icu::UnicodeString::fromUTF8(dateTimeFormat.c_str()); - icu::DateFormat* dateFormatter = new icu::SimpleDateFormat(utf16DateTimeFormat, locale, success); - UDate date = dateFormatter->parse(utf16DateTimeString, success); - delete dateFormatter; - - return date; + const icu::SimpleDateFormat dateFormatter{utf16DateTimeFormat, locale, success}; + return dateFormatter.parse(utf16DateTimeString, success); } std::string L10n::LocalizeDateTime(const UDate dateTime, const DateTimeType& type, const icu::DateFormat::EStyle& style) const { icu::UnicodeString utf16Date; - icu::DateFormat* dateFormatter = CreateDateTimeInstance(type, style, m_CurrentLocale); + const std::unique_ptr dateFormatter = + CreateDateTimeInstance(type, style, m_CurrentLocale); dateFormatter->format(dateTime, utf16Date); char utf8Date[512]; icu::CheckedArrayByteSink sink(utf8Date, ARRAY_SIZE(utf8Date)); utf16Date.toUTF8(sink); ENSURE(!sink.Overflowed()); - delete dateFormatter; return std::string(utf8Date, sink.NumberOfBytesWritten()); } @@ -475,21 +481,23 @@ std::string resultString; icu::UnicodeString unicodeFormat = icu::UnicodeString::fromUTF8(formatString.c_str()); - icu::SimpleDateFormat* dateFormat = new icu::SimpleDateFormat(unicodeFormat, status); + icu::SimpleDateFormat dateFormat{unicodeFormat, status}; if (U_FAILURE(status)) LOGERROR("Error creating SimpleDateFormat: %s", u_errorName(status)); status = U_ZERO_ERROR; - icu::Calendar* calendar = useLocalTimezone ? - icu::Calendar::createInstance(m_CurrentLocale, status) : - icu::Calendar::createInstance(*icu::TimeZone::getGMT(), m_CurrentLocale, status); + std::unique_ptr calendar + { + useLocalTimezone ? + icu::Calendar::createInstance(m_CurrentLocale, status) : + icu::Calendar::createInstance(*icu::TimeZone::getGMT(), m_CurrentLocale, status) + }; if (U_FAILURE(status)) LOGERROR("Error creating calendar: %s", u_errorName(status)); - dateFormat->adoptCalendar(calendar); - dateFormat->format(milliseconds, dateString); - delete dateFormat; + dateFormat.adoptCalendar(calendar.release()); + dateFormat.format(milliseconds, dateString); dateString.toUTF8String(resultString); return resultString; @@ -499,8 +507,10 @@ { UErrorCode success = U_ZERO_ERROR; icu::UnicodeString utf16Number; - icu::NumberFormat* numberFormatter = icu::NumberFormat::createInstance(m_CurrentLocale, - UNUM_DECIMAL, success); + std::unique_ptr numberFormatter + { + icu::NumberFormat::createInstance(m_CurrentLocale, UNUM_DECIMAL, success) + }; numberFormatter->format(number, utf16Number); char utf8Number[512]; icu::CheckedArrayByteSink sink(utf8Number, ARRAY_SIZE(utf8Number));