1

我会用std::map<int, A>

A是一个类,我必须防止浅拷贝,但是有很多类A,所以制作一个深拷贝结构和运算符很烦人。由于我似乎不必使用复制构造函数和复制赋值运算符,所以我决定不使用它们。

为了防止一些错误,我创建了 UnCopyable 类,它具有私有的复制构造函数和复制赋值运算符,并A继承了它。

但是,有一个问题。std::map使用复制构造函数。

我不想将A' 指针保存在地图中。

更好的解决方案是什么?

4

2 回答 2

3

您可能会考虑尝试 C++11,它对此类问题有几个解决方案:std::map::emplace它消除了对 的 Copyable 要求A,并且std::move允许您将一个对象传输到另一个对象而无需复制。

此外,还有一种新的、更明确的方法可以将类定义为不可复制:

A( A const & ) = delete;

现在是升级 C++ 编译器的好时机。

于 2012-06-29T14:48:59.020 回答
1

您可以使用智能指针std::shared_ptr或编写代理类。

例如:

class Foo {
public:
    std::string name() const;
};

typedef std::shared_ptr<Foo> SharedFoo;

或者

class SharedFoo {
public:
    std::string name() const { return instance->name(); }
private:
    std::shared_ptr<Foo> instance;
};
于 2012-06-29T14:40:26.247 回答