@@ -48,36 +48,42 @@ namespace HephAudio
4848 this ->pNativeAudio ->OnCapture += handler;
4949 }
5050
51- Audio::Audio ()
51+ Audio::Audio () : pNativeAudio( nullptr )
5252 {
5353#if defined(_WIN32)
5454
5555 if (IsWindowsVistaOrGreater ())
5656 {
57- this ->pNativeAudio = new WinAudio ();
57+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new WinAudio () );
5858 }
5959 else
6060 {
61- this ->pNativeAudio = new WinAudioDS ();
61+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new WinAudioDS () );
6262 }
6363
6464#elif defined(__ANDROID__)
6565
6666#if __ANDROID_API__ >= HEPHAUDIO_ANDROID_AAUDIO_MIN_API_LEVEL
67- this ->pNativeAudio = new AndroidAudioA ();
67+
68+ this ->pNativeAudio = std::shared_ptr<NativeAudio>(new AndroidAudioA ());
69+
6870#elif __ANDROID_API__ >= HEPHAUDIO_ANDROID_OPENSL_MIN_API_LEVEL
69- this ->pNativeAudio = new AndroidAudioSLES ();
71+
72+ this ->pNativeAudio = std::shared_ptr<NativeAudio>(new AndroidAudioSLES ());
73+
7074#else
75+
7176#error unsupported API level
77+
7278#endif
7379
7480#elif defined(__linux__)
7581
76- this ->pNativeAudio = new LinuxAudio ();
82+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new LinuxAudio () );
7783
7884#elif defined(__APPLE__)
7985
80- this ->pNativeAudio = new AppleAudio ();
86+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new AppleAudio () );
8187
8288#else
8389
@@ -86,56 +92,65 @@ namespace HephAudio
8692#endif
8793 }
8894
89- Audio::Audio (AudioAPI api)
95+ Audio::Audio (AudioAPI api) : pNativeAudio( nullptr )
9096 {
9197#if defined(_WIN32)
9298
9399 switch (api)
94100 {
95101 case AudioAPI::WASAPI:
96- this ->pNativeAudio = new WinAudio ();
102+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new WinAudio () );
97103 break ;
98104 case AudioAPI::DirectSound:
99- this ->pNativeAudio = new WinAudioDS ();
105+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new WinAudioDS () );
100106 break ;
101107 case AudioAPI::MMEAPI:
102- this ->pNativeAudio = new WinAudioMME ();
108+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new WinAudioMME () );
103109 break ;
104110 case AudioAPI::Default:
105111 default :
106- this ->pNativeAudio = IsWindowsVistaOrGreater () ? (NativeAudio*)new WinAudio () : (NativeAudio*)new WinAudioDS ();
112+ this ->pNativeAudio =
113+ (IsWindowsVistaOrGreater ())
114+ ? (std::shared_ptr<NativeAudio>(new WinAudio ()))
115+ : (std::shared_ptr<NativeAudio>(new WinAudioDS ()));
107116 break ;
108117 }
109118
110119#elif defined(__ANDROID__)
111120
112121#if __ANDROID_API__ >= HEPHAUDIO_ANDROID_AAUDIO_MIN_API_LEVEL
122+
113123 switch (api)
114124 {
115125 case AudioAPI::AAudio:
116- this ->pNativeAudio = new AndroidAudioA ();
126+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new AndroidAudioA () );
117127 break ;
118128 case AudioAPI::OpenSLES:
119- this ->pNativeAudio = new AndroidAudioSLES ();
129+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new AndroidAudioSLES () );
120130 break ;
121131 case AudioAPI::Default:
122132 default :
123- this ->pNativeAudio = ( NativeAudio*) new AndroidAudioA ();
133+ this ->pNativeAudio = std::shared_ptr< NativeAudio>( new AndroidAudioA () );
124134 break ;
125135 }
136+
126137#elif __ANDROID_API__ >= HEPHAUDIO_ANDROID_OPENSL_MIN_API_LEVEL
127- this ->pNativeAudio = new AndroidAudioSLES ();
138+
139+ this ->pNativeAudio = std::shared_ptr<NativeAudio>(new AndroidAudioSLES ());
140+
128141#else
142+
129143#error unsupported API level
144+
130145#endif
131146
132147#elif defined(__linux__)
133148
134- this ->pNativeAudio = new LinuxAudio ();
149+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new LinuxAudio () );
135150
136151#elif defined(__APPLE__)
137152
138- this ->pNativeAudio = new AppleAudio ();
153+ this ->pNativeAudio = std::shared_ptr<NativeAudio>( new AppleAudio () );
139154
140155#else
141156
@@ -144,16 +159,7 @@ namespace HephAudio
144159#endif
145160 }
146161
147- Audio::~Audio ()
148- {
149- if (this ->pNativeAudio != nullptr )
150- {
151- delete this ->pNativeAudio ;
152- this ->pNativeAudio = nullptr ;
153- }
154- }
155-
156- NativeAudio* Audio::GetNativeAudio () const
162+ std::shared_ptr<NativeAudio> Audio::GetNativeAudio () const
157163 {
158164 return this ->pNativeAudio ;
159165 }
0 commit comments