LoginSignup
0
0

Microsoft::WRL::ComPtrで起きるメモリーリークの原因 ( 実体験のみ )

Last updated at Posted at 2023-05-30

初めての投稿です、稚拙な文章ですがご容赦ください。
まだプログラミング初心者ですので、間違いがあればご指摘いただきたいです。

VisualStudioでゲーム制作をしていて、シェーダー周りのプログラミングをしている人は一度は下の画像ような状況になったことがあると思います。

↓これはComPtrでメモリーリークが起きた際の出力ログです。
image.png
ComPtrとは、ShaderResourceViewなどを扱う用のunique_ptrみたいな物です。
こういったComPtrのメモリーリークはエラーは出ないわ、出力ログにヒントは出ないわで特定が難しいですよね。

そういうことで、もし今後ComPtrでメモリーリークが起きた際にどういった原因が考えられるのか
自分用にメモしていきたいと思います。

1.生成(登録)の上書き

同じComPtrオブジェクトに複数回 生成している
image.png
同じオブジェクトに複数回生成する場合は生成する前にRelease()しておかないといけない。
以下の画像の様に、ComPtrのAttachメソッドを使う必要があります。
image.png

2.デストラクタの書き忘れ

クラスにメンバ変数としてComPtrを持たせている場合、デストラクタを定義しておかないとメモリーリークが発生する(何故かはわからない)。

今のところ私が遭遇した原因は以上です。(2個しか書けず申し訳ないです)
また新しい原因に遭遇したら追加していきたいと思います。
(メモリーリークに遭遇しないように気を付けます)

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0