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. 終わりに
今回は、簡単なスマートポインタの使用方法をまとめた。スマートポインタを使用することで、メモリ解放が自動的に行われるため、便利である。なにか特殊な動作をさせてたくないのであれば、スマートポインタを使用する方が良いだろう。
この記事が気に入ったらサポートをしてみませんか?