gpt4 book ai didi

c++ - 如何在运行时设置数组大小而不构造对象?

转载 作者:行者123 更新时间:2023-11-28 00:05:21 27 4
gpt4 key购买 nike

如何创建一个大小在运行时计算的 GLTexture nullptr 数组? .下面的实现创建了一个数组 GLTexture 指针,用 nullptr 初始化,大小为 [11][32]。我希望将下面头文件中显示的 11 和 32 与运行时计算的值互换。

头文件

#pragma once
#include <GLEW\glew.h>
#include "GLTexture.h"

namespace Nova
{
class TextureBinder
{
private:
GLuint m_activeUnit;
GLint m_maxTextureUnits;
GLint m_maxTextureTargets;
GLTexture* m_boundTextures[11][32] = {nullptr};

public:

static TextureBinder& GetInstance()
{
static TextureBinder binder;
return binder;
}

TextureBinder(TextureBinder const&) = delete;
void operator=(TextureBinder&) = delete;


private:
TextureBinder();
};
}

CPP文件

#pragma once
#include "TextureBinder.h"

namespace Nova
{
/* zero is the default opengl active texture unit
- glActiveTexture(unit) only needs to be called for multitexturing
*/
TextureBinder::TextureBinder()
:
m_activeUnit(0),
m_maxTextureTargets(11)
{
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &m_maxTextureUnits);
}
}

最佳答案

假设您确实想要一个动态大小的数组(即可以在运行时计算并使用不同的大小),您需要在构造函数中使用循环:

GLTexture*  **m_boundTextures;

TextureBinder() {
/* ... */
m_boundTextures = new GLTexture* *[HEIGHT];
for(int i = 0; i < HEIGHT; i++) {
m_boundTextures[i] = new GLTexture* [WIDTH];
for(int j = 0; j < WIDTH; j++) {
m_boundTextures[i][j] = nullptr;
}
}
/* ... */
}

当然,请确保在析构函数中使用 delete[](以相同的格式)清理内存。

关于c++ - 如何在运行时设置数组大小而不构造对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35975114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com