From 3e12b2fb64350938a3efe3252e84f62aa608356e Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Fri, 19 Mar 2021 14:44:16 +0200 Subject: use unique_ptr in OCommonEmbeddedObject Change-Id: I2258838cbbe242dbe31500ecd6f29c315a335b71 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112743 Tested-by: Jenkins Reviewed-by: Noel Grandin --- embeddedobj/source/commonembedding/miscobj.cxx | 30 +++++++++++--------------- embeddedobj/source/inc/commonembobj.hxx | 3 ++- 2 files changed, 15 insertions(+), 18 deletions(-) (limited to 'embeddedobj') diff --git a/embeddedobj/source/commonembedding/miscobj.cxx b/embeddedobj/source/commonembedding/miscobj.cxx index c62527f84398..c30a4bc64168 100644 --- a/embeddedobj/source/commonembedding/miscobj.cxx +++ b/embeddedobj/source/commonembedding/miscobj.cxx @@ -41,8 +41,7 @@ using namespace ::com::sun::star; OCommonEmbeddedObject::OCommonEmbeddedObject( const uno::Reference< uno::XComponentContext >& rxContext, const uno::Sequence< beans::NamedValue >& aObjProps ) -: m_pInterfaceContainer( nullptr ) -, m_bReadOnly( false ) +: m_bReadOnly( false ) , m_bDisposed( false ) , m_bClosed( false ) , m_nObjectState( -1 ) @@ -67,8 +66,7 @@ OCommonEmbeddedObject::OCommonEmbeddedObject( const uno::Sequence< beans::NamedValue >& aObjProps, const uno::Sequence< beans::PropertyValue >& aMediaDescr, const uno::Sequence< beans::PropertyValue >& aObjectDescr ) -: m_pInterfaceContainer( nullptr ) -, m_bReadOnly( false ) +: m_bReadOnly( false ) , m_bDisposed( false ) , m_bClosed( false ) , m_nObjectState( embed::EmbedStates::LOADED ) @@ -242,17 +240,14 @@ OCommonEmbeddedObject::~OCommonEmbeddedObject() return; osl_atomic_increment(&m_refCount); - try { - lang::EventObject aSource( static_cast< ::cppu::OWeakObject* >( this ) ); - - if ( m_pInterfaceContainer ) - { + if ( m_pInterfaceContainer ) + { + try { + lang::EventObject aSource( static_cast< ::cppu::OWeakObject* >( this ) ); m_pInterfaceContainer->disposeAndClear( aSource ); - - delete m_pInterfaceContainer; - m_pInterfaceContainer = nullptr; - } - } catch( const uno::Exception& ) {} + } catch( const uno::Exception& ) {} + m_pInterfaceContainer.reset(); + } try { if ( m_xDocHolder.is() ) @@ -429,7 +424,7 @@ void SAL_CALL OCommonEmbeddedObject::addStateChangeListener( const uno::Referenc throw lang::DisposedException(); // TODO if ( !m_pInterfaceContainer ) - m_pInterfaceContainer = new ::cppu::OMultiTypeInterfaceContainerHelper( m_aMutex ); + m_pInterfaceContainer.reset(new ::cppu::OMultiTypeInterfaceContainerHelper( m_aMutex )); m_pInterfaceContainer->addInterface( cppu::UnoType::get(), xListener ); @@ -494,6 +489,7 @@ void SAL_CALL OCommonEmbeddedObject::close( sal_Bool bDeliverOwnership ) } m_pInterfaceContainer->disposeAndClear( aSource ); + m_pInterfaceContainer.reset(); } m_bDisposed = true; // the object is disposed now for outside @@ -548,7 +544,7 @@ void SAL_CALL OCommonEmbeddedObject::addCloseListener( const uno::Reference< uti throw lang::DisposedException(); // TODO if ( !m_pInterfaceContainer ) - m_pInterfaceContainer = new ::cppu::OMultiTypeInterfaceContainerHelper(m_aMutex); + m_pInterfaceContainer.reset(new ::cppu::OMultiTypeInterfaceContainerHelper(m_aMutex)); m_pInterfaceContainer->addInterface( cppu::UnoType::get(), xListener ); } @@ -570,7 +566,7 @@ void SAL_CALL OCommonEmbeddedObject::addEventListener( const uno::Reference< doc throw lang::DisposedException(); // TODO if ( !m_pInterfaceContainer ) - m_pInterfaceContainer = new ::cppu::OMultiTypeInterfaceContainerHelper(m_aMutex); + m_pInterfaceContainer.reset(new ::cppu::OMultiTypeInterfaceContainerHelper(m_aMutex)); m_pInterfaceContainer->addInterface( cppu::UnoType::get(), xListener ); } diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx index 2294b0d7e915..e28b3654d1e7 100644 --- a/embeddedobj/source/inc/commonembobj.hxx +++ b/embeddedobj/source/inc/commonembobj.hxx @@ -35,6 +35,7 @@ #include #include #include +#include namespace com::sun::star { namespace embed { @@ -84,7 +85,7 @@ protected: rtl::Reference m_xDocHolder; - ::cppu::OMultiTypeInterfaceContainerHelper* m_pInterfaceContainer; + std::unique_ptr<::cppu::OMultiTypeInterfaceContainerHelper> m_pInterfaceContainer; bool m_bReadOnly; -- cgit