質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

static スマートポインタ変数の生存期間について

退会済みユーザー

退会済みユーザー

総合スコア0

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0リアクション

0クリップ

824閲覧

投稿2021/07/05 05:41

提示コードのコメント部の囲ってるコードですが以下の変数なのですが

static FrameWork::windowContext

void Init();関数でmake_unique()されてその関数を抜けると次のMain関数でNULLになってしまうのですがこれはなぜでしょうか?
スマートポインタを使ったstatic 変数なのですが変数は生きてても生存期間は終了しているためNULLになるのでしょか?

イメージ説明

cpp

#include "FrameWork.hpp" #include "Resource.hpp" #include <iostream> #include "FrameWork.hpp" #include "Player.hpp" int main() { //////////////////////////////////////////////////////////////////////////////////////////////////////// if (FrameWork::Init(glm::ivec2(48 * 26, 48 * 18), glm::ivec2(4, 5), "Dungeon") == false) { std::cerr << "初期化エラー" << std::endl; } /////////////////////////////////////////////////////////////////////////////////////////////////////// std::vector<FrameWork::Resource::Resource_File> file(0); file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicMono_2D.vert",FrameWork::Resource::Asset::shader_BasicMono_vert }); file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicMono_2D.frag",FrameWork::Resource::Asset::shader_BasicMono_frag }); file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicText_2D.vert",FrameWork::Resource::Asset::shader_BasicText_vert }); file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicText_2D.frag",FrameWork::Resource::Asset::shader_BasicText_frag }); file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicTexture_2D.vert",FrameWork::Resource::Asset::shader_BasicTexture_vert }); file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicTexture_2D.frag",FrameWork::Resource::Asset::shader_BasicTexture_frag }); //file.push_back(FrameWork::Resource::Resource_File{ "Assets/debug_texture.png",FrameWork::Resource::Asset::player }); file.push_back(FrameWork::Resource::Resource_File{ "Assets/texture_1.png",FrameWork::Resource::Asset::player }); FrameWork::Resource::InputFile_Ok(file); FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicMono_vert); FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicMono_frag); FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicText_vert); FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicText_frag); FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicTexture_vert); FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicTexture_frag); FrameWork::Resource::LoadTexture(FrameWork::Resource::Asset::player); Player player; ///////////////////////////////////////////////////////////////////////////////////////// if (FrameWork::windowContext == NULL) { std::cout << "ああああ" << std::endl; } //////////////////////////////////////////////////////////////////////////////////////// while (*FrameWork::windowContext) { // FrameWork::windowContext->FrameUpdate(glm::vec4(0, 0, 0, 255.0f)); //フレーム更新 //player.Update(); //player.Draw(); //FrameWork::windowContext->SwapBuffers(); //ダブルバッファリング //FrameWork::windowContext->Wait(); //フレームレート制御 } return 0; }

cpp

#include "Init.hpp" #include <glew/include/GL/glew.h> #include <glfw/include/GLFW/glfw3.h> #include "Window.hpp" namespace FrameWork { // ##################################### 初期化 ##################################### bool Init(glm::ivec2 size,glm::ivec2 ver, const char* title) { setlocale(LC_CTYPE, ""); //ローカルを設定 if (glfwInit() == GL_FALSE) { std::cerr << "glfw初期化失敗。" << std::endl; return false; } /////////////////////////////////////////////////////////////////////////////////////////////////// FrameWork::windowContext = std::make_unique<Window>(size, title); //ウインドウコンテキストを生成 if (FrameWork::windowContext == NULL) { std::cout << "ううううう" << std::endl; } std::cout << "yyy" << std::endl; //////////////////////////////////////////////////////////////////////////////////////////////////// //OpenGL Verison 4.5 Core Profile を選択する glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, ver.x); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, ver.y); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); atexit(glfwTerminate); //プログラム終了時の処理を登録 return true; } }

cpp

#ifndef ___INIT_HPP #define ___INIT_HPP #include "glm/glm.hpp" #include <iostream> #include "Window.hpp" namespace FrameWork { //////////////////////////////////////////////////////////////////////////////////////////// static std::unique_ptr<Window> windowContext = 0; //ウインドウコンテキスト //////////////////////////////////////////////////////////////////////////////////////////// bool Init(glm::ivec2 size, glm::ivec2 ver, const char* title); //初期化 } #endif

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2021/07/08 23:43

こちらの質問が複数のユーザーから「過去の低評価」という指摘を受けました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。