我无法在我的程序中实现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对象,以便在我的所有类中使用。我该怎么做呢?
答案 0 :(得分:1)
“我的目标是实现一个静态ImageManager对象,以便在我的所有类中使用”
您可以将ImageManager实现为Singleton类。但是,只有在没有其他选择的情况下,我才学会使用单身人士。
您还可以在班级中使用静态数据成员。这样,只有一个班级数据成员的副本可以流通。
答案 1 :(得分:0)
一般来说,这种代码并不是你想要的。看一下Singleton
设计模式。