如何围绕多个类传递一个静态对象?

时间:2014-10-15 18:26:24

标签: c++ vector reference static

我无法在我的程序中实现ImageManager。我成功地使用这个方法参考:

//definition in Brick.h
ImageManager &imgr;

//constructor taking &imgr as a reference upon creation of object
Brick::Brick(ImageManager &im) : imgr(im){
//imgr is now a reference in my class, so it points to the same object that imgr in another class would point to
//this essentially makes one "static" instance of imgr, so all my graphic objects are dealing with the same instance of my ImageManager
    imgr.doStuff()
}

这种传递我的imgr的方法曾经工作,直到我开始尝试从矢量中删除obejcts。例如,在我的Level类中,我尝试从Brick对象的向量中删除元素,

void Level::RemoveLine(int line){
    //loop through every piece, loop through given piece's rects, if the rect falls on the removed line, then remove the piece
    for(int i = 0; i < gamePieces_.size(); i++){
        //crt new iterator per each gamepiece
        auto write = gamePieces_[i].GetPieceRectangles().begin();
        int j = 0;
        for(auto read = write; read != gamePieces_[i].GetPieceRectangles().end(); read++){
            if(gamePieces_[i].GetPieceRectangles()[j].GetActiveLine() != line){
                if(read != write){
                    write = std::move(read);
                }
                write++;
            }
        }
        gamePieces_[i].GetPieceRectangles().erase(write, gamePieces_[i].GetPieceRectangles().end());
    }
}

但这不起作用,因为ImageManager &imgr中声明的Brick.h没有复制构造函数,因此在我尝试时无法将其复制到向量中。 erase()元素。我的目标是实现一个静态ImageManager对象,以便在我的所有类中使用。我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

“我的目标是实现一个静态ImageManager对象,以便在我的所有类中使用”

您可以将ImageManager实现为Singleton类。但是,只有在没有其他选择的情况下,我才学会使用单身人士。

您还可以在班级中使用静态数据成员。这样,只有一个班级数据成员的副本可以流通。

答案 1 :(得分:0)

一般来说,这种代码并不是你想要的。看一下Singleton设计模式。

https://en.wikipedia.org/wiki/Singleton_pattern