c++ - 为什么 C++ 中的分配器需要复制构造函数?

标签 c++ stl allocator

据说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/

相关文章:

c++ - 同时追加和读取一个文件

c++ - 容器使用的内部类型的内存分配

c++ - 是否有标准的memory_resource分配器适配器/包装器?

c++ - 是否有标准的 Untokenize 模板化类型?

c++ - 禁用主窗口的标题上下文菜单

c++ - 从上到下横向打印 BST

c++ - 具有来自 STL 的 vector 、列表或映射作为成员的类是否需要复制构造函数

c++ - C++如何在自定义容器中正确调用deallocate

c++ - 访问类中的私有(private)成员

c++ - 动态初始化和使用 C++ STL 列表数组