diff --git a/include/unotools/syslocale.hxx b/include/unotools/syslocale.hxx index 037c6ed9a31e..58615770f8f0 100644 --- a/include/unotools/syslocale.hxx +++ b/include/unotools/syslocale.hxx @@ -45,8 +45,7 @@ class UNOTOOLS_DLLPUBLIC SvtSysLocale { friend class SvtSysLocale_Impl; // access to mutex - static SvtSysLocale_Impl* pImpl; - static sal_Int32 nRefCount; + std::shared_ptr pImpl; UNOTOOLS_DLLPRIVATE static ::osl::Mutex& GetMutex(); diff --git a/unotools/source/misc/syslocale.cxx b/unotools/source/misc/syslocale.cxx index e93e620a5049..b0cef62e7ee9 100644 --- a/unotools/source/misc/syslocale.cxx +++ b/unotools/source/misc/syslocale.cxx @@ -34,8 +34,7 @@ using namespace osl; using namespace com::sun::star; -SvtSysLocale_Impl* SvtSysLocale::pImpl = nullptr; -sal_Int32 SvtSysLocale::nRefCount = 0; +std::weak_ptr pSysLocale; class SvtSysLocale_Impl : public utl::ConfigurationListener { @@ -114,19 +113,18 @@ void SvtSysLocale_Impl::setDateAcceptancePatternsConfig() SvtSysLocale::SvtSysLocale() { MutexGuard aGuard( GetMutex() ); + pImpl = pSysLocale.lock(); if ( !pImpl ) - pImpl = new SvtSysLocale_Impl; - ++nRefCount; + { + pImpl = std::make_shared(); + pSysLocale = pImpl; + } } SvtSysLocale::~SvtSysLocale() { MutexGuard aGuard( GetMutex() ); - if ( !--nRefCount ) - { - delete pImpl; - pImpl = nullptr; - } + pImpl.reset(); } // static