Man*_*mar 6 c++ performance copy-constructor assignment-operator c++11
我正在阅读关于raw_storage_iterator组件的TC++ PL .使用此组件可以获得性能优势,因为它可以避免分配(更昂贵)并使用复制构造.在我看来它应该在序列/容器中使用,在那里我们可以有大量的元素,因此赋值调用的数量可能会产生很大的影响.
理论上它很明确,它在我看来这个组件对容器类型类很有用.但是,我想了解我们应该在位详细信息中使用此组件(带有实际示例)以获得其性能优势?
在cppreference中有示例代码。
您可以通过多种机制分配对齐的未初始化内存块。Cppreferences 用于std::get_temporary_buffer<T>分配这样的缓冲区。
然后您可以创建指向这些元素的指针。指针的类型有点误导,因为它不是指向有效的 T指针,而是指向适合构造 的内存块T。
可以std::raw_storage_iterator用它填充T*并告诉它输出。然后,您可以将该迭代器提供给需要传统输出迭代器的算法,事情就会顺利进行。
如果您尝试在没有 的情况下执行此操作raw_storage_iterator,则会分配给非构造的T,这是未定义的行为。作为替代方案,您可以T在输出到它们之前构造 s ——但这很浪费,因为它构造了对象两次。
基本思想是允许在标准算法中以近乎完美的效率使用未初始化的输出缓冲区。除了一些严肃的代码微优化之外,您不应该使用它。
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |