我的班级有这个成员:
static std::unique_ptr<std::unique_ptr<ICommand>[]> changestatecommands;
Run Code Online (Sandbox Code Playgroud)
我找不到初始化它的正确方法。我希望数组被初始化,但元素未初始化,所以我可以随时编写如下内容:
changestatecommands[i] = std::make_unique<ICommand>();
Run Code Online (Sandbox Code Playgroud)
数组是在声明时立即初始化还是在运行时稍后初始化都没有关系。最理想的是,我想知道如何做到这两点。
我的代码:
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
char** pptr = new char*[5];
for (int i = 0; i < 5; i++)
pptr[i] = new char[5];
}
Run Code Online (Sandbox Code Playgroud)
我想要发生的是,pptr现在指向一个5个指针数组的开头,每个指针都指向一个包含5个字符的数组的开头.
我在main函数的末尾加了一个断点并添加pptr到watch中,它只存储一个指针.为什么会发生这种情况,我该如何正确地做到这一点?

我有一个基于 OpenGL 的非常基本的引擎,可以将任何颜色的多边形渲染到可调整大小的窗口。我现在正在尝试通过我的着色器将模型、透视和视图矩阵作为统一体来为我的着色器实现矩阵。在添加制服之前,一切正常,我什vec2至可以传入制服来模拟鼠标位置处的光源。制服mat4s 的效果不如vec2s。
出于调试目的,我只渲染了一个以屏幕为中心的黄色方块。当不使用制服时,方块会按预期显示。我现在尝试传入一个mat4,设置为单位矩阵。在顶点着色器中,我乘以gl_Position我统一的单位矩阵。当我运行程序时,它只显示一个黑色窗口。
我尝试在顶点着色器中手动创建一个单位矩阵并乘以gl_Position该矩阵而不是统一矩阵。当我这样做时,我的黄色方块显示正常。这让我相信制服mat4没有得到正确的值,但是,我不知道在着色器中使用矩阵时如何检查它的值。
这是我的顶点着色器的外观:
#version 430 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec4 color;
out vec4 Color;
uniform mat4 model;
uniform mat4 view;
uniform mat4 project;
void main()
{
mat4 id;
id[0] = vec4(1.0, 0.0, 0.0, 0.0);
id[1] = vec4(0.0, 1.0, 0.0, 0.0);
id[2] = vec4(0.0, 0.0, 1.0, 0.0);
id[3] = vec4(0.0, 0.0, 0.0, 1.0);
Color …Run Code Online (Sandbox Code Playgroud)