在多个类中使用私有静态变量

时间:2014-08-27 20:56:02

标签: c++ oop static

我的一个程序类是在窗口的不同位置绘制图像序列。该类有多个实例,但它是在窗口内的所有位置绘制的相同图像序列。我想防止多个类初始化多个图像序列的实例以避免吃掉内存,为此我将图像序列变量作为静态变量

class Drawer{
private:
static ImageSequence imgSequence;
};

在.cpp文件中,我正在执行以下操作来初始化静态var。

#include "Drawer.h"

ImageSequence Drawer::imgSequence = ImageSequence();

但是,我有两种方法来指定图像序列的路径和预加载帧 - 并且混淆了放置这些方法的位置,以便每个Drawer类实例化不会一次又一次地预加载帧。如何在C ++中完成?

- 编辑 要求的两种方法:i)loadSequence,ii)preloadAllFrames();

    loadSequence(string prefix, string firstFrame, string lastFrame){
    for(int i=0;i<numFrames;++i){
    //adds and pushes values of all the files in the sequence to a vector
    }
}

preloadAllFrames(){
for(int i=0;i<numFrames;++i){
//create pointers to image textures and store then in a vector so that it doesn't take time to load them for drawing
}
}

2 个答案:

答案 0 :(得分:0)

在图像上有一个附带的布尔值,并在您尝试加载图像时检查图像是否已经加载。您也可以在程序初始化一次时加载它,而不是每帧都尝试加载它。

答案 1 :(得分:0)

只需要一个静态指针而不是实例,并在静态方法中初始化:

class Drawer{
private:
    static std::unique_ptr<ImageSequence> imgSequence;
public:
    static void initializeMethod1() 
    {
        if( imgSequence ) return; // or throw exception
        imgSequence.reset( new ImageSequence( ... ) );
        ...
    }

    static void initializeMethod2() {}
    {
        if( imgSequence ) return; // or throw exception
        imgSequence.reset( new ImageSequence( ... ) );
        ...
    }

    static ImageSequence &getSequence() 
    { 
        if( !imgSequence ) throw std::runtime_error( "image sequence is not intialized" );
        return *imgSequence;
    }
};