我将使用std::map<int, A>
A
是一个类,我必须防止浅拷贝,
但是有许多类如A
,因此制作深层复制构造和运算符是令人厌倦的。
既然看起来我不必使用复制构造函数和复制赋值运算符,
我决定不使用它们。
为了防止出现一些错误,我制作了UnCopyable类,它有私有拷贝构造函数和拷贝赋值运算符,而A
继承了它。
然而,有一个问题。 std::map
使用复制构造函数。
我不想在地图中保存A
的指针。
什么是更好的解决方案?
答案 0 :(得分:3)
您可能会考虑尝试使用C ++ 11,它有一些解决此类问题的方法:std::map::emplace
取消了A
的可复制要求,std::move
允许您将一个物体转移到另一个物体而不复制。
此外,还有一种新的,更明确的方法可以将类定义为不可复制的:
A( A const & ) = delete;
现在是升级C ++编译器的好时机。
答案 1 :(得分:1)
您可以使用std::shared_ptr
之类的智能指针或编写代理类。
E.g:
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;
};