提示コードですがstd::shared_ptr<>は最後の参照がなくなった時にメモリが解放させるという処理ですが。この場合while();文の中では変数の命が尽きないので実質メモリリークしており。while();文を抜けたときメモリが解放されるという理解で正しいのでしょうか?
参考サイト: https://qiita.com/hmito/items/db3b14917120b285112f
cpp
1#ifndef ___TEXTURE_HPP_ 2#define ___TEXTURE_HPP_ 3#include <iostream> 4#include "glm/glm.hpp" 5#include "glew/include/GL/glew.h" 6 7/*######################################################################### 8# テクスチャ構造体 9 10説明 11 テクスチャのデータ 12###########################################################################*/ 13namespace FrameWork 14{ 15 //テクスチャデータ構造体 16 typedef struct 17 { 18 glm::ivec2 size; //画像サイズ 19 std::shared_ptr<unsigned char*> fileData; //画像データ 20 int channel; //画像のチャンネル数 21 GLuint ID; //テクスチャID 22 GLuint textureUnitNumber; //テクスチャユニット番号 23 }TextureData; 24 25 std::shared_ptr<FrameWork::TextureData> LoadTexture(const char* fileName); //テクスチャーロード 26} 27#endif
cpp
1#include "Texture.hpp" 2 3#define STB_IMAGE_IMPLEMENTATION 4#include "stb/stb_image.h" 5 6// ##################################### 画像読み込み ##################################### 7std::shared_ptr<FrameWork::TextureData> FrameWork::LoadTexture(const char* fileName) 8{ 9 //std::shared_ptr<FrameWork::TextureData> data = std::make_shared<FrameWork::TextureData>(); 10 TextureData data;// = std::make_shared<FrameWork::TextureData>(); 11 data.fileData = NULL; 12 data.fileData = std::make_shared<unsigned char*>(stbi_load(fileName, &data.size.x, &data.size.y, &data.channel, 0)); //画像読み込み 13 assert(data.fileData && "画像ファイルがありません。"); 14 15 return std::make_shared<FrameWork::TextureData>(data); 16} 17
cpp
1 2 while (*window) 3 { 4 window->FrameUpdate(glm::vec4(0.0f, 0.0f, 255.0f, 255.0f)); //フレーム更新 5 6 std::shared_ptr<FrameWork::TextureData> textureData = FrameWork::LoadTexture("Assets/tile.png"); 7 8 9 window->SwapBuffers(); //ダブルバッファリング 10 window->Wait(); //フレームレート制御 11 } 12 13
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/29 08:31
2021/06/29 08:32
2021/06/29 09:32 編集
2021/06/29 09:40
2021/06/29 09:47
退会済みユーザー
2021/06/29 11:35 編集
2021/06/29 12:14