C++初学者问题:静态类成员RenderingInterface9在运行时似乎没有分配空间,不会发生内存泄漏

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()函数来删除。