見出し画像

C++でunique_ptrの簡単な使い方

1. はじめに

 スマートポインタは、動的に確保されたメモリを自動解放する仕組みのことである。これによって、deleteを書き忘れて、メモリリークすることを防ぐことができる。
 今回は、簡単なプログラムでunique_ptrの使い方をまとめる。

2. new/deleteを使用したメモリの動的確保

 スマートポインタの導入以前のプログラムは、new/deleteを使用してメモリを動的に確保していた。

#include <iostream>
class Car {
private:
    std::string name;
public:
    void setName(std::string _name) {
        name = _name;
    }
    void display() {
        std::cout << name << std::endl;
    }
};

int main()
{
    Car *car = new Car(); // 生のポインタを使用して動的にCarオブジェクトを生成
    car->setName("車");
    car->display();
    delete car; // 使用後にオブジェクトを削除してメモリを解放
    return 0;
}

 上記のプログラムは、new/deleteを使用してCarクラスの名前の設定と名前を表示するプログラムである。「Car *car = new Car();」で動的にCarクラスのオブジェクトを生成している。最後に、carクラスを削除し、メモリを開放している。

3. スマートポインタを使用したメモリの動的確保

 スマートポインタを使用すると、下記のように記述できる。

#include <iostream>
class Car {
private:
    std::string name;
public:
    void setName(std::string _name) {
        name = _name;
    }
    void display() {
        std::cout << name << std::endl;
    }
};
int main()
{
    std::unique_ptr<Car> car = std::make_unique<Car>();
    car->setName("パジェロ");
    car->display();

    // unique_ptrのデストラクタが自動的にCarオブジェクトを削除し、メモリを解放する。
    return 0;
}

 上記は、スマートポインタを使用した例題である。

 unique_ptr<クラス名> 変数名 = std::make_unique<クラス名>();と記述することで、スマートポインタを使用することができる(実際にはunique_ptr)。また、プログラムを見ると、deleteを使用する必要が無くなっていることが分かる。

4. 終わりに

 今回は、簡単なスマートポインタの使用方法をまとめた。スマートポインタを使用することで、メモリ解放が自動的に行われるため、便利である。なにか特殊な動作をさせてたくないのであれば、スマートポインタを使用する方が良いだろう。



この記事が気に入ったらサポートをしてみませんか?