在分配器的特殊情况下std :: basic_string中的错误

时间:2014-07-06 12:32:52

标签: c++ c++11 allocator

我使用g ++并且我定义了一个自定义分配器,其中size_type是byte。 我正在使用basic_string来创建自定义字符串。

" basic_string.tcc"代码行为错误,因为在

的代码中
_S_create(size_type __capacity, size_type __old_capacity, const _Alloc& __alloc) 

代码检查

const size_type __extra = __pagesize - __adj_size % __pagesize;

但是所有算术都是字节算术,所以__pagesize应该有一个值4096,变为0(因为4096是256的倍数),我们有一个"除以0"异常(代码挂起)。

问题不在于我该怎么做,但我怎么能要求对上述代码进行更正?从谁 ? (我可以实施这些更正)。

1 个答案:

答案 0 :(得分:3)

在您要求或建议对此类内容进行更改之前,您必须建立一个强有力的案例,确实存在需要修复的问题。在我看来,可能没有。

问题是:在哪种情况下将size_type定义为unsigned char是合法的(或有用的)?我不知道标准中有什么特别不允许这种选择。它被定义为

  

无符号整数类型 - 可以表示分配模型中最大对象大小的类型。

根据s3.9.1,unsigned char肯定是unsigned integer type。有趣。

它有用吗?很明显,你似乎这么认为,但我不确定你的情况是否已经强烈推出。您可以提供证据证明这是一个值得解决的问题。

所以在我看来这个过程是:

  1. 确定unsigned char是否有意作为标准中的有效选择,或者是否应将其排除,或者是否被忽略。
  2. 针对遇到问题的每个编译器,向团队提出“标准不合规”问题,提供良好的推理和重复案例。
  3. 考虑提交补丁,如果这是你能够解决的问题。
  4. 或者你可以改用short unsigned int。我愿意。