假设我有一个类Bitmap
,它有一个静态缓存Maptextures
,其中包含指向所有已注册图像的指针。
class Bitmap {
public:
Bitmap(const std::string &filename);
// ... functionality ...
private:
// ... image data ...
std::string filename;
static std::map<std::string, std::unique_ptr<Bitmap>> images;
}
Bitmap
的构造函数是否可以在缓存中搜索具有相同filename
的现有对象,然后返回对该对象的引用?
我试过
if (images.find(filename) != images.end()) {
*this = images[filename].get();
return;
}
但这似乎不起作用。有没有办法使用构造函数来实现这种效果呢?
2条答案
按热度按时间mbzjlibv1#
当你真正构造一个对象时,你已经超出了控制对象分配的范围,构造函数只是用来初始化对象。
一种以最少的程式码变更来达成此目的的方法,是将建构函式设为私用,并建立静态方法来执行建立/快取逻辑。
驱动程序代码:
输出量:
这实际上将
Bitmap
类变成了一个自我管理的缓存。如果你想允许缓存和未缓存的位图示例,那么你可以将缓存的东西移到一个单独的工厂类中,比如BitmapManager
。9rnv2umw2#
让它工作的合理方法是将所有数据成员移动到一个结构体中,并将一个
std::shared_ptr
存储到Bitmap
中(以及静态Map中)。