据说here这是因为异常规范。我不明白。这个问题跟异常规范有关系吗?
最佳答案
看完教程后,我对措辞有点困惑。但我相信它就这么简单:教程解释了为什么分配器的模板头显示
allocator(const allocator&) throw();
和
template <class U> allocator(const allocator<U>&) throw();
尽管复制构造函数对于分配器来说是相当无用的。答案是分配器的规范不允许构造函数抛出异常。因此,复制构造函数公共(public)接口(interface)定义了异常规范为 throw()
的复制构造函数。 (不抛出任何异常)以防止有人使用可能抛出异常的复制构造函数派生他们自己的分配器。
参见 this link如果那是抛出你的异常规范,则可以很好地描述什么是异常规范。 (没有双关语意。真的。)
因此,他们并不是说在创建分配器时,您必须提供复制构造函数。他们只是指出规范明确禁止您定义抛出任何异常的规范。 `
关于c++ - 为什么 C++ 中的分配器需要复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7137227/