【问题标题】:Can a C++ constructor return a pointer to a cached version of an identical object?C++ 构造函数能否返回指向相同对象的缓存版本的指针?
【发布时间】: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


【解决方案1】:

使其工作的明智方法是将所有数据成员移动到一个结构,并将 std::shared_ptr 存储到 Bitmap(以及静态映射)中。

【讨论】:

    猜你喜欢
    • 2020-06-15
    • 2015-06-03
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多