根据cppreference, std :: basic_ostringstream 可以使用自定义分配器进行实例化。从C ++ 11开始,允许分配器具有状态,并且我的自定义分配器类确实具有内部每实例状态(实际上每个分配器实例都有一个指向 MemPool 类的实例的指针,转发所有分配请求)。这就是为什么我的分配器类型不能简单地默认构造并且预期可以工作,因为毕竟,它将获得 MemPool 实例的地址。应该使用?
不幸的是,如果你看一下 std :: basic_ostringstream 的constructor prototypes,你会发现所支持的构造函数都没有实际占用分配器实例!我很确定 std :: basic_ostringstream 必须进行一些分配来构造它的结果字符串,我真的希望它使用我的分配器来实现它们,但它是怎么回事如果我无法告诉它使用哪个特定的 MemPool 实例呢?
我在这里忽略了什么吗?我觉得我必须拥有,但我现在肯定不知道。
答案 0 :(得分:2)
向LWG defect #2210添加分配器实例到许多标准库容器的构造函数的解析可能不够彻底,并且忽略了流。或者也许它不清楚如何接近它们。我建议提交一份新的图书馆缺陷报告(或者可能先在std-discussion中询问)
答案 1 :(得分:2)
您可以将basic_string<C, T, A>
对象传递给构造函数,我希望所有实现都将从该字符串对象复制分配器(可能通过调用allocator_traits<A>::select_on_container_copy_construction()
),但是没有明确指定标准,也许应该是。