C++でwavファイル等の読み込みをする際に、先にバッファを確保して中身を読む処理が入るのですが、
auto* buffer = new char[size];
/* 読み込み処理 */
free[] buffer;
みたいな形でバッファを確保しているとエラー処理等の分岐時にどこかで解放漏れが起こりそうで怖くありますね(そしてメモリリークが起こる)。
配列をshared_ptrに出来ればこれが楽になるのになと思っていたら、C++14で可能になっていたということに今更ながら先日気付きました。
C++17でさらに変わったらしい記述がこれ。
#include <memory>
auto buffer = std::shared_ptr<char[]>(size);
/* 読み込み処理 */
こうしておけばうかつな解放忘れを防げるわけですねー。
charをunsigned charにするなど違う型にキャストする場合はreinterpret_pointer_cast。
auto hoge = std::reinterpret_pointer_cast<unsigned char[]>(buffer);
この書き方もC++17からとのこと。
便利な仕様ですが、VC2022を使って新規プロジェクトを作ると初期設定の言語がC++14であるため設定を変えないと使えない罠。
便利な新機能は特に縛りが無い限り使った方がお得ですね。新機能と云っても8年前ですが。