明日への断片

ゲーム制作やプログラミング関する記事を中心に更新していこうと思います。

65欠片目:ユニークポインタの勉強(基礎編)

 こんにちは。学校行こうと駅までで行ったところで財布を忘れたことに気が付いたvoidです。
全力で帰宅、全力で駅に戻って、遅刻にならない最後の電車の時間に間に合ったのですが、電車の遅延が発生していたという展開でした...

持ち物チェックは重要ですね...

newとdeleteとメモリリーク

 C++ではプログラムの中で動的にメモリを確保するにはnew演算子を使います。
例えば、

int* p1 = new int;

int* p2 = new int[5];

とすることで、p1にはint型(4byte)分のメモリが、p2にはint型が5つ分のメモリ、すなわち20byteのメモリがヒープ領域に確保されます。

 newを使って確保したメモリを開放するにはdelete演算子を使います。

delete p1;

delete[] p2;

とすることで、確保したメモリを開放することが出来ます。


 通常C++では、new を使って動的なメモリ確保を行った場合、delete を使ってメモリを開放する必要があります。解放しないとメモリリークが発生してしまいます。
 しかし、それをプログラマが全て管理しようとすると、deleteを忘れてしまいメモリリークが発生するリスクがあります。そんなリスクを減らすために作られたのがスマートポインタです。
 確保したメモリの所有権をスマートポインタが持つことで、デストラクタで自動的にメモリを開放してくれます。

ユニークポインタ

 unique_ptrはスマートポインタの機能の1つです。その名の通り、あるメモリの所有権を持つunique_ptrはただ1つしか存在できず、コピーすることもできません。
スマートポインタを使う際には、#include<memory>が必要になります。

参考サイト:C++11スマートポインタ入門 - Qiita


本日は以上。ではまた!