我想通过自定义分配器路由std :: regex_match执行的所有分配。
基于std::regex_match with another Allocator,我可以通过以下操作重新路由其中一些:
using string_type = std::basic_string<char, std::char_traits<char>, Allocator<char>>;
using match_type = std::match_results<string_type::const_iterator, Allocator<std::sub_match<string_type::const_iterator>>>;
string_type value;
match_type::allocator_type allocator;
match_type results(allocator);
std::regex expression("expression");
std::regex_match(value, results, expression);
但是std::vectors
类内部有一些_Matcher
,它们不使用传递的分配器。这是VS2017 STL库的疏忽吗,还是我做错了什么?有什么我可以解决的吗?
<regex>
中不使用分配器的向量是:
_Tgt_state_t<_It> _Tgt_state; // contains vector<_Grp_t> _Grps;
_Tgt_state_t<_It> _Res; // contains vector<_Grp_t> _Grps;
vector<_Loop_vals_t> _Loop_vals;
在此先感谢您的帮助!
答案 0 :(得分:1)
我怀疑这是VS2017的STL库中的一个疏漏;我看了libc ++,它似乎在内部使用了分配器作为向量。
答案 1 :(得分:1)
我将其归档为https://github.com/microsoft/STL/issues/174。据我所知,该标准对此主题保持沉默,因此MSVC和libc ++的行为都是一致的。使用match_results分配器似乎是合理的,但实际上应该对Standardese进行全面修改以要求特定的行为。