UnoControls/source/base/basecontainercontrol.cxx | 2 - UnoControls/source/controls/progressmonitor.cxx | 38 +++++++++-------------- UnoControls/source/inc/progressmonitor.hxx | 5 +-- bridges/source/jni_uno/jni_info.cxx | 14 ++++---- bridges/source/jni_uno/jni_info.h | 4 +- helpcompiler/inc/HelpCompiler.hxx | 14 ++++---- helpcompiler/source/HelpCompiler.cxx | 6 +-- helpcompiler/source/HelpLinker.cxx | 6 +-- include/svl/itempool.hxx | 2 - svl/qa/unit/items/test_itempool.cxx | 2 - svl/source/fsstor/fsstorage.cxx | 3 - svl/source/fsstor/fsstorage.hxx | 2 - svl/source/inc/poolio.hxx | 10 +----- svl/source/items/itempool.cxx | 24 +++++++------- svl/source/items/itemset.cxx | 2 - svl/source/items/poolio.cxx | 2 - tools/source/stream/stream.cxx | 7 +++- 17 files changed, 66 insertions(+), 77 deletions(-)
New commits: commit be408facea08a28c83b2de6c0587235a6949e704 Author: Noel Grandin <[email protected]> Date: Fri Apr 13 09:37:35 2018 +0200 loplugin:useuniqueptr in FSStorage Change-Id: Ib7d175905e3fc597e3350d6673cf4f4cc49c96f9 Reviewed-on: https://gerrit.libreoffice.org/52888 Tested-by: Jenkins <[email protected]> Reviewed-by: Noel Grandin <[email protected]> diff --git a/svl/source/fsstor/fsstorage.cxx b/svl/source/fsstor/fsstorage.cxx index c899bfe357c4..c1350f86270a 100644 --- a/svl/source/fsstor/fsstorage.cxx +++ b/svl/source/fsstor/fsstorage.cxx @@ -1035,8 +1035,7 @@ void SAL_CALL FSStorage::dispose() m_pImpl->m_pListenersContainer->disposeAndClear( aSource ); } - delete m_pImpl; - m_pImpl = nullptr; + m_pImpl.reset(); } void SAL_CALL FSStorage::addEventListener( diff --git a/svl/source/fsstor/fsstorage.hxx b/svl/source/fsstor/fsstorage.hxx index a3ba6b2ffc65..18574f2b7205 100644 --- a/svl/source/fsstor/fsstorage.hxx +++ b/svl/source/fsstor/fsstorage.hxx @@ -43,7 +43,7 @@ class FSStorage : public css::lang::XTypeProvider , public ::cppu::OWeakObject { ::osl::Mutex m_aMutex; - FSStorage_Impl* m_pImpl; + std::unique_ptr<FSStorage_Impl> m_pImpl; protected: commit 23ae341869ddb0d1af81ee7a5705b776817afd4c Author: Noel Grandin <[email protected]> Date: Thu Apr 12 15:40:33 2018 +0200 assert that we own the data before freeing it Change-Id: I9676da22c00570cd59f2f46b04beb5f1337bbacf Reviewed-on: https://gerrit.libreoffice.org/52887 Tested-by: Jenkins <[email protected]> Reviewed-by: Noel Grandin <[email protected]> diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx index 5d6d3e58336b..b48275819739 100644 --- a/tools/source/stream/stream.cxx +++ b/tools/source/stream/stream.cxx @@ -1866,7 +1866,12 @@ bool SvMemoryStream::ReAllocateMemory( long nDiff ) void SvMemoryStream::FreeMemory() { - delete[] pBuf; + assert(bOwnsData); + if (bOwnsData) + { + delete[] pBuf; + pBuf = nullptr; + } } void* SvMemoryStream::SwitchBuffer() commit 3d44b720f58366398e7f59c00dba6339712a670f Author: Noel Grandin <[email protected]> Date: Thu Apr 12 15:40:12 2018 +0200 loplugin:useuniqueptr in SfxItemPool_Impl Change-Id: Ic3d695dd3ad4ee5ca6537f65d643d8736e3a5700 Reviewed-on: https://gerrit.libreoffice.org/52886 Tested-by: Jenkins <[email protected]> Reviewed-by: Noel Grandin <[email protected]> diff --git a/include/svl/itempool.hxx b/include/svl/itempool.hxx index f4f5d86f3a08..29f736f44ca1 100644 --- a/include/svl/itempool.hxx +++ b/include/svl/itempool.hxx @@ -77,7 +77,7 @@ private: public: // for default SfxItemSet::CTOR, set default WhichRanges - void FillItemIdRanges_Impl( sal_uInt16*& pWhichRanges ) const; + void FillItemIdRanges_Impl( std::unique_ptr<sal_uInt16[]>& pWhichRanges ) const; const sal_uInt16* GetFrozenIdRanges() const; protected: diff --git a/svl/qa/unit/items/test_itempool.cxx b/svl/qa/unit/items/test_itempool.cxx index a3132be80b0a..cde5dee62f2c 100644 --- a/svl/qa/unit/items/test_itempool.cxx +++ b/svl/qa/unit/items/test_itempool.cxx @@ -80,7 +80,7 @@ void PoolItemTest::testPool() } // Test rehash - for (SfxPoolItemArray_Impl *pSlice : pImpl->maPoolItems) + for (auto & pSlice : pImpl->maPoolItems) { if (pSlice) pSlice->ReHash(); diff --git a/svl/source/inc/poolio.hxx b/svl/source/inc/poolio.hxx index 538c89994603..359b88c863dd 100644 --- a/svl/source/inc/poolio.hxx +++ b/svl/source/inc/poolio.hxx @@ -71,14 +71,14 @@ public: struct SfxItemPool_Impl { SfxBroadcaster aBC; - std::vector<SfxPoolItemArray_Impl*> maPoolItems; + std::vector<std::unique_ptr<SfxPoolItemArray_Impl>> maPoolItems; std::vector<SfxItemPoolUser*> maSfxItemPoolUsers; /// ObjectUser section OUString aName; std::vector<SfxPoolItem*> maPoolDefaults; std::vector<SfxPoolItem*>* mpStaticDefaults; SfxItemPool* mpMaster; SfxItemPool* mpSecondary; - sal_uInt16* mpPoolRanges; + std::unique_ptr<sal_uInt16[]> mpPoolRanges; sal_uInt16 mnStart; sal_uInt16 mnEnd; MapUnit eDefMetric; @@ -105,13 +105,9 @@ struct SfxItemPool_Impl void DeleteItems() { - for (auto pPoolItemArray : maPoolItems) - delete pPoolItemArray; maPoolItems.clear(); maPoolDefaults.clear(); - - delete[] mpPoolRanges; - mpPoolRanges = nullptr; + mpPoolRanges.reset(); } // unit testing diff --git a/svl/source/items/itempool.cxx b/svl/source/items/itempool.cxx index 07eab0ab3435..76e9d90b485f 100644 --- a/svl/source/items/itempool.cxx +++ b/svl/source/items/itempool.cxx @@ -620,11 +620,11 @@ const SfxPoolItem& SfxItemPool::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich typeid(rItem) == typeid(GetDefaultItem(nWhich))); const sal_uInt16 nIndex = GetIndex_Impl(nWhich); - SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[nIndex]; + SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[nIndex].get(); if (!pItemArr) { - pImpl->maPoolItems[nIndex] = new SfxPoolItemArray_Impl; - pItemArr = pImpl->maPoolItems[nIndex]; + pImpl->maPoolItems[nIndex].reset(new SfxPoolItemArray_Impl); + pItemArr = pImpl->maPoolItems[nIndex].get(); } std::vector<SfxPoolItem*>::iterator ppFree; @@ -753,7 +753,7 @@ void SfxItemPool::Remove( const SfxPoolItem& rItem ) return; // Find Item in own Pool - SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[nIndex]; + SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[nIndex].get(); assert(pItemArr && "removing Item not in Pool"); SfxPoolItemArray_Impl::PoolItemPtrToIndexMap::const_iterator it; @@ -826,7 +826,7 @@ void SfxItemPool::FreezeIdRanges() } -void SfxItemPool::FillItemIdRanges_Impl( sal_uInt16*& pWhichRanges ) const +void SfxItemPool::FillItemIdRanges_Impl( std::unique_ptr<sal_uInt16[]>& pWhichRanges ) const { DBG_ASSERT( !pImpl->mpPoolRanges, "GetFrozenRanges() would be faster!" ); @@ -835,20 +835,20 @@ void SfxItemPool::FillItemIdRanges_Impl( sal_uInt16*& pWhichRanges ) const for( pPool = this; pPool; pPool = pPool->pImpl->mpSecondary ) ++nLevel; - pWhichRanges = new sal_uInt16[ 2*nLevel + 1 ]; + pWhichRanges.reset(new sal_uInt16[ 2*nLevel + 1 ]); nLevel = 0; for( pPool = this; pPool; pPool = pPool->pImpl->mpSecondary ) { - *(pWhichRanges+(nLevel++)) = pPool->pImpl->mnStart; - *(pWhichRanges+(nLevel++)) = pPool->pImpl->mnEnd; - *(pWhichRanges+nLevel) = 0; + pWhichRanges[nLevel++] = pPool->pImpl->mnStart; + pWhichRanges[nLevel++] = pPool->pImpl->mnEnd; + pWhichRanges[nLevel] = 0; } } const sal_uInt16* SfxItemPool::GetFrozenIdRanges() const { - return pImpl->mpPoolRanges; + return pImpl->mpPoolRanges.get(); } const SfxPoolItem *SfxItemPool::GetItem2Default(sal_uInt16 nWhich) const @@ -870,7 +870,7 @@ const SfxPoolItem *SfxItemPool::GetItem2(sal_uInt16 nWhich, sal_uInt32 nOfst) co if ( nOfst == SFX_ITEMS_DEFAULT ) return (*pImpl->mpStaticDefaults)[ GetIndex_Impl(nWhich) ]; - SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[GetIndex_Impl(nWhich)]; + SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[GetIndex_Impl(nWhich)].get(); if( pItemArr && nOfst < pItemArr->size() ) return (*pItemArr)[nOfst]; @@ -887,7 +887,7 @@ sal_uInt32 SfxItemPool::GetItemCount2(sal_uInt16 nWhich) const return 0; } - SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[GetIndex_Impl(nWhich)]; + SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[GetIndex_Impl(nWhich)].get(); if ( pItemArr ) return pItemArr->size(); return 0; diff --git a/svl/source/items/itemset.cxx b/svl/source/items/itemset.cxx index 784e23a33e22..e967089e17ee 100644 --- a/svl/source/items/itemset.cxx +++ b/svl/source/items/itemset.cxx @@ -94,8 +94,6 @@ SfxItemSet::SfxItemSet(SfxItemPool& rPool) { m_pWhichRanges = const_cast<sal_uInt16*>(m_pPool->GetFrozenIdRanges()); assert( m_pWhichRanges && "don't create ItemSets with full range before FreezeIdRanges()" ); - if (!m_pWhichRanges) - m_pPool->FillItemIdRanges_Impl( m_pWhichRanges ); const sal_uInt16 nSize = TotalCount(); m_pItems.reset(new const SfxPoolItem*[nSize]{}); diff --git a/svl/source/items/poolio.cxx b/svl/source/items/poolio.cxx index 4d73a8af581f..c73e85c2b0ac 100644 --- a/svl/source/items/poolio.cxx +++ b/svl/source/items/poolio.cxx @@ -104,7 +104,7 @@ bool SfxItemPool::CheckItemInPool(const SfxPoolItem *pItem) const if( IsStaticDefaultItem(pItem) || IsPoolDefaultItem(pItem) ) return true; - SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[GetIndex_Impl(pItem->Which())]; + SfxPoolItemArray_Impl* pItemArr = pImpl->maPoolItems[GetIndex_Impl(pItem->Which())].get(); DBG_ASSERT(pItemArr, "ItemArr is not available"); for ( size_t i = 0; i < pItemArr->size(); ++i ) commit 73c29a2978f967d317235d524aad535a6bafbff0 Author: Noel Grandin <[email protected]> Date: Thu Apr 12 15:39:54 2018 +0200 loplugin:useuniqueptr in StreamTable Change-Id: I6a6314a3e6df9edfb6d92d2afbc1567195946292 Reviewed-on: https://gerrit.libreoffice.org/52885 Tested-by: Jenkins <[email protected]> Reviewed-by: Noel Grandin <[email protected]> diff --git a/helpcompiler/inc/HelpCompiler.hxx b/helpcompiler/inc/HelpCompiler.hxx index 952e58acc987..e063bd61f1a7 100644 --- a/helpcompiler/inc/HelpCompiler.hxx +++ b/helpcompiler/inc/HelpCompiler.hxx @@ -165,19 +165,19 @@ public: std::string document_module; std::string document_title; - HashSet *appl_hidlist; - Hashtable *appl_keywords; - Stringtable *appl_helptexts; + std::unique_ptr<HashSet> appl_hidlist; + std::unique_ptr<Hashtable> appl_keywords; + std::unique_ptr<Stringtable> appl_helptexts; xmlDocPtr appl_doc; StreamTable() : - appl_hidlist(nullptr), appl_keywords(nullptr), appl_helptexts(nullptr), appl_doc(nullptr) + appl_doc(nullptr) {} void dropappl() { - delete appl_hidlist; - delete appl_keywords; - delete appl_helptexts; + appl_hidlist.reset(); + appl_keywords.reset(); + appl_helptexts.reset(); if (appl_doc) xmlFreeDoc(appl_doc); } ~StreamTable() diff --git a/helpcompiler/source/HelpCompiler.cxx b/helpcompiler/source/HelpCompiler.cxx index cc8c319e58a5..2c56ecafc628 100644 --- a/helpcompiler/source/HelpCompiler.cxx +++ b/helpcompiler/source/HelpCompiler.cxx @@ -476,9 +476,9 @@ bool HelpCompiler::compile() streamTable.dropappl(); streamTable.appl_doc = docResolvedDoc; - streamTable.appl_hidlist = aparser.hidlist.release(); - streamTable.appl_helptexts = aparser.helptexts.release(); - streamTable.appl_keywords = aparser.keywords.release(); + streamTable.appl_hidlist = std::move(aparser.hidlist); + streamTable.appl_helptexts = std::move(aparser.helptexts); + streamTable.appl_keywords = std::move(aparser.keywords); streamTable.document_id = documentId; streamTable.document_path = fileName; diff --git a/helpcompiler/source/HelpLinker.cxx b/helpcompiler/source/HelpLinker.cxx index 315ce57035ca..b146349200b7 100644 --- a/helpcompiler/source/HelpLinker.cxx +++ b/helpcompiler/source/HelpLinker.cxx @@ -383,7 +383,7 @@ void HelpLinker::link() // add once this as its own id. addBookmark( pFileDbBase_DBHelp, documentPath, fileB, std::string(), jarfileB, titleB); - const HashSet *hidlist = streamTable.appl_hidlist; + const HashSet *hidlist = streamTable.appl_hidlist.get(); if (hidlist && !hidlist->empty()) { // now iterate over all elements of the hidlist @@ -403,7 +403,7 @@ void HelpLinker::link() } // now the keywords - const Hashtable *anchorToLL = streamTable.appl_keywords; + const Hashtable *anchorToLL = streamTable.appl_keywords.get(); if (anchorToLL && !anchorToLL->empty()) { std::string fakedHid = URLEncoder::encode(documentPath); @@ -424,7 +424,7 @@ void HelpLinker::link() } // and last the helptexts - const Stringtable *helpTextHash = streamTable.appl_helptexts; + const Stringtable *helpTextHash = streamTable.appl_helptexts.get(); if (helpTextHash && !helpTextHash->empty()) { for (auto const& elem : *helpTextHash) commit 2e0cf814671e99a1d1a902a5828768c620c4674c Author: Noel Grandin <[email protected]> Date: Thu Apr 12 15:39:25 2018 +0200 loplugin:useuniqueptr in ProgressMonitor Change-Id: Ic66e49037c04501a2c39a69f3f8a2a03cb10b5fc Reviewed-on: https://gerrit.libreoffice.org/52884 Tested-by: Jenkins <[email protected]> Reviewed-by: Noel Grandin <[email protected]> diff --git a/UnoControls/source/base/basecontainercontrol.cxx b/UnoControls/source/base/basecontainercontrol.cxx index 499bf34e6bd9..cbc476731078 100644 --- a/UnoControls/source/base/basecontainercontrol.cxx +++ b/UnoControls/source/base/basecontainercontrol.cxx @@ -167,8 +167,6 @@ void SAL_CALL BaseContainerControl::dispose() // remove controls Sequence< Reference< XControl > > seqCtrls = getControls(); - for ( auto & i : maControlInfoList ) - delete i; maControlInfoList.clear(); for ( Reference< XControl > const & control : seqCtrls ) diff --git a/UnoControls/source/controls/progressmonitor.cxx b/UnoControls/source/controls/progressmonitor.cxx index 4d513ee26b2f..b43afd5d6e73 100644 --- a/UnoControls/source/controls/progressmonitor.cxx +++ b/UnoControls/source/controls/progressmonitor.cxx @@ -197,7 +197,7 @@ void SAL_CALL ProgressMonitor::addText( } // Else ... take memory for new item ... - IMPL_TextlistItem* pTextItem = new IMPL_TextlistItem; + std::unique_ptr<IMPL_TextlistItem> pTextItem(new IMPL_TextlistItem); // Set values ... pTextItem->sTopic = rTopic; @@ -209,11 +209,11 @@ void SAL_CALL ProgressMonitor::addText( // ... and insert it in right list. if ( bbeforeProgress ) { - maTextlist_Top.push_back( pTextItem ); + maTextlist_Top.push_back( std::move(pTextItem) ); } else { - maTextlist_Bottom.push_back( pTextItem ); + maTextlist_Bottom.push_back( std::move(pTextItem) ); } // ... update window @@ -239,15 +239,17 @@ void SAL_CALL ProgressMonitor::removeText ( const OUString& rTopic, sal_Bool bbe // ... delete item from right list ... if ( bbeforeProgress ) { - vector< IMPL_TextlistItem* >::iterator - itr = find( maTextlist_Top.begin(), maTextlist_Top.end(), pSearchItem ); + auto itr = std::find_if( maTextlist_Top.begin(), maTextlist_Top.end(), + [&] (std::unique_ptr<IMPL_TextlistItem> const &p) + { return p.get() == pSearchItem; } ); if (itr != maTextlist_Top.end()) maTextlist_Top.erase(itr); } else { - vector< IMPL_TextlistItem* >::iterator - itr = find( maTextlist_Bottom.begin(), maTextlist_Bottom.end(), pSearchItem ); + auto itr = std::find_if( maTextlist_Bottom.begin(), maTextlist_Bottom.end(), + [&] (std::unique_ptr<IMPL_TextlistItem> const &p) + { return p.get() == pSearchItem; } ); if (itr != maTextlist_Bottom.end()) maTextlist_Bottom.erase(itr); } @@ -723,7 +725,7 @@ void ProgressMonitor::impl_rebuildFixedText () // Collect all topics from list and format text. // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!! - for (IMPL_TextlistItem* pSearchItem : maTextlist_Top) + for (auto const & pSearchItem : maTextlist_Top) { aCollectString += pSearchItem->sTopic + "\n"; } @@ -738,7 +740,7 @@ void ProgressMonitor::impl_rebuildFixedText () // Collect all topics from list and format text. // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!! - for (IMPL_TextlistItem* pSearchItem : maTextlist_Top) + for (auto const & pSearchItem : maTextlist_Top) { aCollectString += pSearchItem->sText + "\n"; } @@ -755,7 +757,7 @@ void ProgressMonitor::impl_rebuildFixedText () // Collect all topics from list and format text. // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!! - for (IMPL_TextlistItem* pSearchItem : maTextlist_Bottom) + for (auto const & pSearchItem : maTextlist_Bottom) { aCollectString += pSearchItem->sTopic + "\n"; } @@ -770,7 +772,7 @@ void ProgressMonitor::impl_rebuildFixedText () // Collect all topics from list and format text. // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!! - for (IMPL_TextlistItem* pSearchItem : maTextlist_Bottom) + for (auto const & pSearchItem : maTextlist_Bottom) { aCollectString += pSearchItem->sText + "\n"; } @@ -786,17 +788,7 @@ void ProgressMonitor::impl_cleanMemory () MutexGuard aGuard ( m_aMutex ); // Delete all of lists. - - for (IMPL_TextlistItem* pSearchItem : maTextlist_Top) - { - delete pSearchItem; - } maTextlist_Top.clear(); - - for (IMPL_TextlistItem* pSearchItem : maTextlist_Bottom) - { - delete pSearchItem; - } maTextlist_Bottom.clear(); } @@ -804,7 +796,7 @@ void ProgressMonitor::impl_cleanMemory () IMPL_TextlistItem* ProgressMonitor::impl_searchTopic ( const OUString& rTopic, bool bbeforeProgress ) { // Get right textlist for following operations. - ::std::vector< IMPL_TextlistItem* >* pTextList; + ::std::vector< std::unique_ptr<IMPL_TextlistItem> >* pTextList; // Ready for multithreading ClearableMutexGuard aGuard ( m_aMutex ); @@ -827,7 +819,7 @@ IMPL_TextlistItem* ProgressMonitor::impl_searchTopic ( const OUString& rTopic, b for ( nPosition = 0; nPosition < nCount; ++nPosition ) { - IMPL_TextlistItem* pSearchItem = pTextList->at( nPosition ); + auto pSearchItem = pTextList->at( nPosition ).get(); if ( pSearchItem->sTopic == rTopic ) { diff --git a/UnoControls/source/inc/progressmonitor.hxx b/UnoControls/source/inc/progressmonitor.hxx index 5ab211eaa0ef..e31cdab1de1c 100644 --- a/UnoControls/source/inc/progressmonitor.hxx +++ b/UnoControls/source/inc/progressmonitor.hxx @@ -60,6 +60,7 @@ #include <rtl/ref.hxx> #include <vector> +#include <memory> #include <basecontainercontrol.hxx> @@ -276,11 +277,11 @@ private: // private variables private: - ::std::vector < IMPL_TextlistItem* > maTextlist_Top; // Elements before progress + ::std::vector < std::unique_ptr<IMPL_TextlistItem> > maTextlist_Top; // Elements before progress css::uno::Reference< css::awt::XFixedText > m_xTopic_Top; // (used, if parameter "beforeProgress"=true in "addText, updateText, removeText") css::uno::Reference< css::awt::XFixedText > m_xText_Top; - ::std::vector < IMPL_TextlistItem* > maTextlist_Bottom; // Elements below of progress + ::std::vector < std::unique_ptr<IMPL_TextlistItem> > maTextlist_Bottom; // Elements below of progress css::uno::Reference< css::awt::XFixedText > m_xTopic_Bottom; // (used, if parameter "beforeProgress"=false in "addText, updateText, removeText") css::uno::Reference< css::awt::XFixedText > m_xText_Bottom; commit 2d2906da813362d83bc6a7d7093eefcc9566dbb1 Author: Noel Grandin <[email protected]> Date: Thu Apr 12 15:08:22 2018 +0200 loplugin:useuniqueptr in bridges Change-Id: I7bf75ffafa63ec88e89192ed32880675c9ae1d61 Reviewed-on: https://gerrit.libreoffice.org/52883 Tested-by: Jenkins <[email protected]> Reviewed-by: Noel Grandin <[email protected]> diff --git a/bridges/source/jni_uno/jni_info.cxx b/bridges/source/jni_uno/jni_info.cxx index 82b773d6d58c..9b43356856af 100644 --- a/bridges/source/jni_uno/jni_info.cxx +++ b/bridges/source/jni_uno/jni_info.cxx @@ -61,7 +61,7 @@ void JNI_interface_type_info::destroy( JNIEnv * jni_env ) JNI_type_info::destruct( jni_env ); jni_env->DeleteGlobalRef( m_proxy_ctor ); jni_env->DeleteGlobalRef( m_type ); - delete [] m_methods; + m_methods.reset(); delete this; } @@ -104,7 +104,7 @@ JNI_interface_type_info::JNI_interface_type_info( reinterpret_cast< typelib_InterfaceTypeDescription * >( m_td.get() ); // coverity [ctor_dtor_leak] - m_methods = new jmethodID[ td->nMapFunctionIndexToMemberIndex ]; + m_methods.reset(new jmethodID[ td->nMapFunctionIndexToMemberIndex ]); sal_Int32 nMethodIndex = 0; typelib_TypeDescriptionReference ** ppMembers = td->ppMembers; sal_Int32 nMembers = td->nMembers; @@ -211,7 +211,7 @@ JNI_interface_type_info::JNI_interface_type_info( } catch (...) { - delete [] m_methods; + m_methods.reset(); throw; } } @@ -224,7 +224,7 @@ JNI_interface_type_info::JNI_interface_type_info( void JNI_compound_type_info::destroy( JNIEnv * jni_env ) { JNI_type_info::destruct( jni_env ); - delete [] m_fields; + m_fields.reset(); delete this; } @@ -289,7 +289,7 @@ JNI_compound_type_info::JNI_compound_type_info( jni_info->m_RuntimeException_type.getTypeLibType() )) { // coverity [ctor_dtor_leak] - m_fields = new jfieldID[ 2 ]; + m_fields.reset(new jfieldID[ 2 ]); m_fields[ 0 ] = nullptr; // special Throwable.getMessage() // field Context m_fields[ 1 ] = jni->GetFieldID( @@ -301,7 +301,7 @@ JNI_compound_type_info::JNI_compound_type_info( { // retrieve field ids for all direct members sal_Int32 nMembers = td->nMembers; - m_fields = new jfieldID[ nMembers ]; + m_fields.reset(new jfieldID[ nMembers ]); for ( sal_Int32 nPos = 0; nPos < nMembers; ++nPos ) { @@ -334,7 +334,7 @@ JNI_compound_type_info::JNI_compound_type_info( } catch (...) { - delete [] m_fields; + m_fields.reset(); throw; } diff --git a/bridges/source/jni_uno/jni_info.h b/bridges/source/jni_uno/jni_info.h index 920e78453afe..98ba7c9e505a 100644 --- a/bridges/source/jni_uno/jni_info.h +++ b/bridges/source/jni_uno/jni_info.h @@ -82,7 +82,7 @@ struct JNI_interface_type_info : public JNI_type_info jobject m_proxy_ctor; // proxy ctor jobject m_type; // sorted via typelib function index - jmethodID * m_methods; + std::unique_ptr<jmethodID[]> m_methods; virtual void destroy( JNIEnv * jni_env ) override; explicit JNI_interface_type_info( @@ -98,7 +98,7 @@ struct JNI_compound_type_info : public JNI_type_info // ctor( msg ) for exceptions jmethodID m_exc_ctor; // sorted via typelib member index - jfieldID * m_fields; + std::unique_ptr<jfieldID[]> m_fields; virtual void destroy( JNIEnv * jni_env ) override; explicit JNI_compound_type_info( _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
