From 01ea68b99323f635d10ecb0278a6d7f58cc280cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Hecht?= <7500936+mackel90@users.noreply.github.com> Date: Wed, 1 Oct 2025 23:53:49 +0200 Subject: [PATCH 1/2] RtApi pointer implementation as shared_ptr to increase C++ compatibility. --- RtAudio.cpp | 28 ++++++++++------------------ RtAudio.h | 4 ++-- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/RtAudio.cpp b/RtAudio.cpp index 4343ff8d..8e394be8 100644 --- a/RtAudio.cpp +++ b/RtAudio.cpp @@ -548,45 +548,43 @@ RtAudio::Api RtAudio :: getCompiledApiByDisplayName( const std::string &name ) void RtAudio :: openRtApi( RtAudio::Api api ) { - if ( rtapi_ ) - delete rtapi_; - rtapi_ = 0; + rtapi_.reset(); #if defined(__UNIX_JACK__) if ( api == UNIX_JACK ) - rtapi_ = new RtApiJack(); + rtapi_.reset(new RtApiJack()); #endif #if defined(__LINUX_ALSA__) if ( api == LINUX_ALSA ) - rtapi_ = new RtApiAlsa(); + rtapi_.reset(new RtApiAlsa()); #endif #if defined(__LINUX_PULSE__) if ( api == LINUX_PULSE ) - rtapi_ = new RtApiPulse(); + rtapi_.reset(new RtApiPulse()); #endif #if defined(__LINUX_OSS__) if ( api == LINUX_OSS ) - rtapi_ = new RtApiOss(); + rtapi_.reset(new RtApiOss()); #endif #if defined(__WINDOWS_ASIO__) if ( api == WINDOWS_ASIO ) - rtapi_ = new RtApiAsio(); + rtapi_.reset(new RtApiAsio()); #endif #if defined(__WINDOWS_WASAPI__) if ( api == WINDOWS_WASAPI ) - rtapi_ = new RtApiWasapi(); + rtapi_.reset(new RtApiWasapi()); #endif #if defined(__WINDOWS_DS__) if ( api == WINDOWS_DS ) - rtapi_ = new RtApiDs(); + rtapi_.reset(new RtApiDs()); #endif #if defined(__MACOSX_CORE__) if ( api == MACOSX_CORE ) - rtapi_ = new RtApiCore(); + rtapi_.reset(new RtApiCore()); #endif #if defined(__RTAUDIO_DUMMY__) if ( api == RTAUDIO_DUMMY ) - rtapi_ = new RtApiDummy(); + rtapi_.reset(new RtApiDummy()); #endif } @@ -640,12 +638,6 @@ RtAudio :: RtAudio( RtAudio::Api api, RtAudioErrorCallback&& errorCallback ) abort(); } -RtAudio :: ~RtAudio() -{ - if ( rtapi_ ) - delete rtapi_; -} - RtAudioErrorType RtAudio :: openStream( RtAudio::StreamParameters *outputParameters, RtAudio::StreamParameters *inputParameters, RtAudioFormat format, unsigned int sampleRate, diff --git a/RtAudio.h b/RtAudio.h index 48552b66..e9a8d112 100644 --- a/RtAudio.h +++ b/RtAudio.h @@ -438,7 +438,7 @@ class RTAUDIO_DLL_PUBLIC RtAudio If a stream is running or open, it will be stopped and closed automatically. */ - ~RtAudio(); + ~RtAudio() { } //! Returns the audio API specifier for the current instance of RtAudio. RtAudio::Api getCurrentApi( void ); @@ -644,7 +644,7 @@ class RTAUDIO_DLL_PUBLIC RtAudio protected: void openRtApi( RtAudio::Api api ); - RtApi *rtapi_; + std::shared_ptr rtapi_; }; // Operating system dependent thread functionality. From 6bd345b1b9ede8be6d52931d84b011be994c4d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Hecht?= <7500936+mackel90@users.noreply.github.com> Date: Fri, 3 Oct 2025 10:31:59 +0200 Subject: [PATCH 2/2] Added header (pull request schecks failing) --- RtAudio.h | 1 + 1 file changed, 1 insertion(+) diff --git a/RtAudio.h b/RtAudio.h index e9a8d112..ec71d9d0 100644 --- a/RtAudio.h +++ b/RtAudio.h @@ -83,6 +83,7 @@ #include #include #include +#include /*! \typedef typedef unsigned long RtAudioFormat; \brief RtAudio data format type.