我可以阻止复制构造函数出现一些异常吗?
Can I prevent a copy constructor with some exception?
我将使用std::map<int, A>
A
是一堂课,我必须防止浅拷贝,但是有很多像A
这样的类,所以做一个深拷贝结构和运算符是很烦人的。由于我似乎不必使用复制构造函数和复制赋值运算符,我决定不使用它们。
为了防止一些错误,我做了UnCopyable类,它有私有复制构造器和复制赋值运算符,A
继承了它。
但是,有一个问题。 std::map
使用复制构造函数。
我不想将A
的指针保存在地图中。
更好的解决方案是什么?
您可以考虑尝试 C++11,它对此类问题有几个解决方案:std::map::emplace
消除了对 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;
};
相关文章:
- std::元组分配和复制/移动异常保证
- 为什么C++异常(可能)被复制
- 将一个数组复制到函数内的另一个数组时的运行时指针异常
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- 为什么要抛出引用调用复制构造函数的异常?
- C 11复制Elison和异常(捕获论点)
- 可移动但不可复制的异常
- 我可以复制构造一个带有错误信息的提升::异常吗?
- 复制构造函数中出现异常的可能原因是什么
- 我可以阻止复制构造函数出现一些异常吗?
- 视觉C++:引发异常会调用复制构造函数
- 复制提升::跨线程崩溃的异常
- 在复制赋值运算符(c++)中处理异常
- C++ 异常的双重释放损坏错误(复制构造函数不起作用)
- 复制 ctor 的异常行为
- 下面最后一句粗体字与复制抛出的异常有关
- 如果引发的异常始终是异常对象的副本,为什么不调用此复制构造函数?
- 异常和复制构造函数:c++
- 为什么不能从析构函数抛出异常,但可以从复制构造函数抛出异常
- 在异常处理中避免复制