std::raw_storage_iterator
来自 cppreference.cn
定义于头文件 <memory> |
||
template< class OutputIt, class T > class raw_storage_iterator |
(C++17 前) | |
template< class OutputIt, class T > class raw_storage_iterator; |
(C++17 起) (C++17 中已弃用) (C++20 中移除) |
|
输出迭代器 std::raw_storage_iterator
使标准算法可以将结果存储在未初始化内存中。每当算法将 T
类型的对象写入解引用迭代器时,该对象就会被复制构造到迭代器指向的未初始化存储位置。模板参数 OutputIt
是满足 LegacyOutputIterator 要求并定义了 operator* 以返回一个对象的任何类型,其中 operator& 返回一个 T*
类型的对象。通常,T*
类型用作 OutputIt
。
目录 |
[编辑] 类型要求
-OutputIt 必须满足 LegacyOutputIterator 的要求。 |
[编辑] 成员函数
创建新的 raw_storage_iterator (公开成员函数) | |
在缓冲区中指向的位置构造一个对象 (公开成员函数) | |
解引用迭代器 (公开成员函数) | |
前进迭代器 (公开成员函数) | |
(C++17 起) |
提供对包装迭代器的访问 (公开成员函数) |
[编辑] 成员类型
成员类型 | 定义 | ||||
iterator_category
|
std::output_iterator_tag | ||||
value_type
|
void | ||||
difference_type
|
| ||||
pointer
|
void | ||||
reference
|
void |
成员类型 |
(C++17 前) |
[编辑] 注记
std::raw_storage_iterator
被弃用主要是因为它存在异常不安全行为。与 std::uninitialized_copy 不同,它在 std::copy 等操作期间不能安全地处理异常,由于缺乏对成功构造对象数量的跟踪以及在出现异常时对它们的正确销毁,可能导致资源泄漏。
[编辑] 示例
运行此代码
#include <algorithm> #include <iostream> #include <memory> #include <string> int main() { const std::string s[] = {"This", "is", "a", "test", "."}; std::string* p = std::allocator<std::string>().allocate(5); std::copy(std::begin(s), std::end(s), std::raw_storage_iterator<std::string*, std::string>(p)); for (std::string* i = p; i != p + 5; ++i) { std::cout << *i << '\n'; i->~basic_string<char>(); } std::allocator<std::string>().deallocate(p, 5); }
输出
This is a test .
[编辑] 另请参阅
(C++11) |
提供关于分配器类型的信息 (类模板) |
(C++11) |
为多层容器实现多层分配器 (类模板) |
(C++11) |
检查指定类型是否支持 uses-allocator 构造 (类模板) |