Use std::vector over uint8_t[]
diff --git a/src/opensles/AudioStreamOpenSLES.cpp b/src/opensles/AudioStreamOpenSLES.cpp
index f08b3ab..89f00e3 100644
--- a/src/opensles/AudioStreamOpenSLES.cpp
+++ b/src/opensles/AudioStreamOpenSLES.cpp
@@ -37,28 +37,24 @@
     mSessionId = SessionId::None;
 }
 
-AudioStreamOpenSLES::~AudioStreamOpenSLES() {
-    delete[] mCallbackBuffer;
-}
-
 constexpr SLuint32  kAudioChannelCountMax = 30;
 constexpr SLuint32  SL_ANDROID_UNKNOWN_CHANNELMASK  = 0; // Matches name used internally.
 
 SLuint32 AudioStreamOpenSLES::channelCountToChannelMaskDefault(int channelCount) {
     if (channelCount > kAudioChannelCountMax) {
         return SL_ANDROID_UNKNOWN_CHANNELMASK;
-    } else {
-        SLuint32 bitfield = (1 << channelCount) - 1;
-
-        // Check for OS at run-time.
-        if(getSdkVersion() >= __ANDROID_API_N__) {
-            return SL_ANDROID_MAKE_INDEXED_CHANNEL_MASK(bitfield);
-        } else {
-            // Indexed channels masks were added in N.
-            // For before N, the best we can do is use a positional channel mask.
-            return bitfield;
-        }
     }
+
+    SLuint32 bitfield = (1 << channelCount) - 1;
+
+    // Check for OS at run-time.
+    if(getSdkVersion() >= __ANDROID_API_N__) {
+        return SL_ANDROID_MAKE_INDEXED_CHANNEL_MASK(bitfield);
+    }
+
+    // Indexed channels masks were added in N.
+    // For before N, the best we can do is use a positional channel mask.
+    return bitfield;
 }
 
 static bool s_isLittleEndian() {
@@ -109,8 +105,8 @@
         LOGE("AudioStreamOpenSLES::open() bytesPerCallback < 0, bad format?");
         return Result::ErrorInvalidFormat; // causing bytesPerFrame == 0
     }
-    delete[] mCallbackBuffer; // to prevent memory leaks
-    mCallbackBuffer = new uint8_t[mBytesPerCallback];
+
+    mCallbackBuffer.reserve(mBytesPerCallback);
 
     mSharingMode = SharingMode::Shared;
 
@@ -211,38 +207,36 @@
 }
 
 Result AudioStreamOpenSLES::close() {
-
-    if (mState == StreamState::Closed){
+    if (mState == StreamState::Closed) {
         return Result::ErrorClosed;
-    } else {
-        AudioStreamBuffered::close();
-
-        onBeforeDestroy();
-
-        if (mObjectInterface != nullptr) {
-            (*mObjectInterface)->Destroy(mObjectInterface);
-            mObjectInterface = nullptr;
-
-        }
-
-        onAfterDestroy();
-
-        mSimpleBufferQueueInterface = nullptr;
-        EngineOpenSLES::getInstance().close();
-
-        setState(StreamState::Closed);
-        return Result::OK;
     }
+
+    AudioStreamBuffered::close();
+
+    onBeforeDestroy();
+
+    if (mObjectInterface != nullptr) {
+        (*mObjectInterface)->Destroy(mObjectInterface);
+        mObjectInterface = nullptr;
+    }
+
+    onAfterDestroy();
+
+    mSimpleBufferQueueInterface = nullptr;
+    EngineOpenSLES::getInstance().close();
+
+    setState(StreamState::Closed);
+    return Result::OK;
 }
 
 SLresult AudioStreamOpenSLES::enqueueCallbackBuffer(SLAndroidSimpleBufferQueueItf bq) {
-    return (*bq)->Enqueue(bq, mCallbackBuffer, mBytesPerCallback);
+    return (*bq)->Enqueue(bq, mCallbackBuffer.data(), mBytesPerCallback);
 }
 
 void AudioStreamOpenSLES::processBufferCallback(SLAndroidSimpleBufferQueueItf bq) {
     bool stopStream = false;
     // Ask the callback to fill the output buffer with data.
-    DataCallbackResult result = fireDataCallback(mCallbackBuffer, mFramesPerCallback);
+    DataCallbackResult result = fireDataCallback(mCallbackBuffer.data(), mFramesPerCallback);
     if (result == DataCallbackResult::Continue) {
         // Update Oboe service position based on OpenSL ES position.
         updateServiceFrameCounter();
diff --git a/src/opensles/AudioStreamOpenSLES.h b/src/opensles/AudioStreamOpenSLES.h
index 3d6996a..082e9e6 100644
--- a/src/opensles/AudioStreamOpenSLES.h
+++ b/src/opensles/AudioStreamOpenSLES.h
@@ -17,6 +17,8 @@
 #ifndef OBOE_AUDIO_STREAM_OPENSL_ES_H_
 #define OBOE_AUDIO_STREAM_OPENSL_ES_H_
 
+#include <vector>
+
 #include <SLES/OpenSLES.h>
 #include <SLES/OpenSLES_Android.h>
 
@@ -45,7 +47,7 @@
     AudioStreamOpenSLES();
     explicit AudioStreamOpenSLES(const AudioStreamBuilder &builder);
 
-    virtual ~AudioStreamOpenSLES();
+    virtual ~AudioStreamOpenSLES() = default;
 
     virtual Result open() override;
     virtual Result close() override;
@@ -110,7 +112,7 @@
     SLObjectItf                   mObjectInterface = nullptr;
     SLAndroidSimpleBufferQueueItf mSimpleBufferQueueInterface = nullptr;
 
-    uint8_t                      *mCallbackBuffer = nullptr;
+    std::vector<uint8_t>          mCallbackBuffer;
     int32_t                       mBytesPerCallback = oboe::kUnspecified;
     MonotonicCounter              mPositionMillis; // for tracking OpenSL ES service position