代码之家  ›  专栏  ›  技术社区  ›  riv

STD::只有移动构造函数可用的映射

c++
  •  1
  • riv  · 技术社区  · 6 年前

    我有一个具有私有构造函数(容器类可以访问)的类、删除的复制构造函数和默认的移动构造函数。我怎么用它 std::map ?

    class Item {
    public:
        Item(const Item&) = delete;
    private:
        friend class Storage;
        Item(int value);
    };
    
    class Storage {
    public:
        void addItem(int key, int value) {
            // what to put here?
        }
    private:
        std::map<int, Item> items_;
    };
    

    使用 emplace(key, Item(value)) 不起作用,因为它试图复制构造项。包装项目 std::move 有同样的效果。使用 piecewise_construct 不起作用,因为映射(或对)尝试使用普通构造函数,这是私有的。

    1 回复  |  直到 6 年前
        1
  •  7
  •   Rakete1111    6 年前

    class Item {
    public:
        Item(const Item&) = delete;
        Item(Item&&) = default;
    
        // Might be a good idea to declare the two assignment operators too
        Item& operator=(const Item&) = delete;
        Item& operator=(Item&&) = default;
    private:
        friend class Storage;
        Item(int value);
    };
    

    items_.emplace(key, Item(value));