【发布时间】:2022-11-30 03:51:23
【问题描述】:
假设我有一个类Bitmap,它有一个静态缓存映射textures,它包含指向所有已注册图像的指针。
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;
}
但这似乎不起作用。有没有办法使用构造函数来实现这种效果?
【问题讨论】:
-
不,它必须创建一个新对象。也许使用静态函数或自由函数来实现你想要实现的目标?
-
构造函数不返回任何事物。您的“图像数据”是什么样的?
-
这听起来像你想要一个工厂函数,而不是一个构造函数。
-
听起来您可能想要一个由对象缓存支持的工厂函数。
-
到你真正的时候建设中一个对象,您已经超出了控制对象分配的范围。相反,尝试将构造函数设为私有并添加一个静态方法,如
GetBitmap,它执行缓存,然后返回指向新对象或缓存对象的引用或指针。
标签: c++ pointers caching constructor