0

当我做

UErrorCode status = U_ZERO_ERROR;
icu::Transliterator* myTrans = Transliterator::createInstance("Latin-Greek", UTRANS_FORWARD, status);
myTrans->transliterate(...);

并且没有进一步的用途myTrans,AddressSanitizer 告诉我它正在泄漏内存。我没有看到类似closefreehttps://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1Transliterator.html中的方法。有,unregister但这意味着我不能再次创建相同的音译,对吗?

4

1 回答 1

0

在我的特定情况下有效的解决方法:声明

class AutoDeletedTransliterator {
public:
    AutoDeletedTransliterator(const icu::UnicodeString& id, UErrorCode& status)
        : transliterator_(icu::Transliterator::createInstance(
              id, UTRANS_FORWARD, status)) {}
    ~AutoDeletedTransliterator() {
        icu::Transliterator::unregister(transliterator_->getID());
    }
    void transliterate(icu::UnicodeString& string) {
        transliterator_->transliterate(string);
    }

private:
    icu::Transliterator* transliterator_;
};

并在静态变量中使用它,因此析构函数在程序结束时运行。

于 2020-10-21T13:40:39.200 回答