C++における安全なメモリ解放

C++における安全なメモリ解放

手動でのメモリ解放

C++では new で確保したメモリは delete または delete[] で解放する必要があります。


int* ptr = new int(10);
delete ptr; // メモリ解放
ptr = nullptr; // ダングリングポインタを防ぐ
    

配列を解放する場合は delete[] を使用します。


int* arr = new int[5];
delete[] arr;
arr = nullptr; // 安全対策
    

スマートポインタを使った安全なメモリ管理

C++11以降では std::unique_ptrstd::shared_ptr を使うことで、安全なメモリ管理が可能です。

unique_ptr


#include <memory>
std::unique_ptr ptr = std::make_unique(10);
// deleteは不要
    

shared_ptr


#include <memory>
std::shared_ptr sptr1 = std::make_shared(20);
std::shared_ptr sptr2 = sptr1; // 参照カウントが増える
    

よくあるミスと対策

deleteの重複呼び出し


int* ptr = new int(10);
delete ptr;
delete ptr; // 未定義動作
    

対策:delete 後に ptr = nullptr; を設定

deleteとdelete[]の混同


int* arr = new int[5];
delete arr; // 未定義動作
    

対策:配列は delete[] を使用

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です