C++初学者问题:静态类成员RenderingInterface9在运行时似乎没有分配空间,应该怎么修改以下代码,并如何删除数组,不会发生内存泄漏?
//main.cpp
#include <iostream>
#include"IRenderingInterface9.h"
void MainFunction();
int main()
{
MainFunction();
}
void MainFunction()
{
for (auto& Tmp : IRenderingInterface9::RenderingInterface9)
{
Tmp->PreDraw9();
}
}
//IRenderingInterface9.h
#pragma once
#include <vector>
class IRenderingInterface9
{
public:
IRenderingInterface9();
static std::vector<IRenderingInterface9*> RenderingInterface9;
void PreDraw9();
};
//IRenderingInterface9.cpp
#include "IRenderingInterface9.h"
#include <iostream>
std::vector<IRenderingInterface9*> IRenderingInterface9::RenderingInterface9;
IRenderingInterface9::IRenderingInterface9()
{
RenderingInterface9.push_back(this);
}
void IRenderingInterface9::PreDraw9()
{
std::cout << "predraw";
}
在当前代码中,RenderingInterface9
是一个静态类成员变量,但它只被声明,而没有被定义。因此,在运行时,这个变量没有被分配空间,所以程序访问这个变量时会导致未定义行为。
要解决这个问题,需要在某个文件中对RenderingInterface9
进行定义。可以在IRenderingInterface9.cpp
中加入如下一行代码:
std::vector<IRenderingInterface9*> IRenderingInterface9::RenderingInterface9;
这样就会对RenderingInterface9
进行定义并分配空间,然后就可以正常地访问这个静态变量了。
另外,由于RenderingInterface9
是一个动态数组,它会在程序结束时自动销毁,因此不需要手动删除它。不过,如果在程序运行过程中需要删除数组元素,可以使用std::vector
提供的erase()
函数来删除。