我会用std::map<int, A>
A
是一个类,我必须防止浅拷贝,但是有很多类A
,所以制作一个深拷贝结构和运算符很烦人。由于我似乎不必使用复制构造函数和复制赋值运算符,所以我决定不使用它们。
为了防止一些错误,我创建了 UnCopyable 类,它具有私有的复制构造函数和复制赋值运算符,并A
继承了它。
但是,有一个问题。std::map
使用复制构造函数。
我不想将A
' 指针保存在地图中。
更好的解决方案是什么?
我会用std::map<int, A>
A
是一个类,我必须防止浅拷贝,但是有很多类A
,所以制作一个深拷贝结构和运算符很烦人。由于我似乎不必使用复制构造函数和复制赋值运算符,所以我决定不使用它们。
为了防止一些错误,我创建了 UnCopyable 类,它具有私有的复制构造函数和复制赋值运算符,并A
继承了它。
但是,有一个问题。std::map
使用复制构造函数。
我不想将A
' 指针保存在地图中。
更好的解决方案是什么?
您可能会考虑尝试 C++11,它对此类问题有几个解决方案:std::map::emplace
它消除了对 的 Copyable 要求A
,并且std::move
允许您将一个对象传输到另一个对象而无需复制。
此外,还有一种新的、更明确的方法可以将类定义为不可复制:
A( A const & ) = delete;
现在是升级 C++ 编译器的好时机。
您可以使用智能指针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;
};