传递给std :: basic_string的分配器可以将其方法设为虚拟

时间:2015-12-22 13:33:23

标签: c++ c++11 std

我需要为std :: basic_string支持各种类型的分配器(静态,动态,池化等)。另外,我希望所有这些都只有一种类型。所以有多种类型,如:

std::basic_string<char, std::char_traits<char>, static_alloc_t>
std::basic_string<char, std::char_traits<char>, dyna_alloc_t>
std::basic_string<char, std::char_traits<char>, pool_alloc_t>

不起作用。

如果我定义一个基本分配器类型,并且所有方法std :: basic_string需要为virtual,然后编写从中派生的多个类并覆盖这些虚拟方法,那么可以这样做。当我创建字符串对象时,我传递了正确的派生类型。

这个计划会违反标准吗?我见过std库创建传递的分配器副本的地方。在这种情况下,它将调用我的基本分配器的复制构造函数而不是派生类型。

1 个答案:

答案 0 :(得分:0)

  

如果我定义一个基本分配器类型,并且所有方法std :: basic_string需要为virtual,然后编写从中派生的多个类并覆盖这些虚拟方法,那么可以这样做。当我创建字符串对象时,我传递了正确的派生类型。

是的......但你为什么要这样做?如果你知道分配器不需要多态的类型。

如果您遇到不知道类型的情况,并且希望以多态方式处理分配器,则可以完成但不能直接处理。

这是因为分配器必须是可复制的,并且无法通过其基础复制多态对象。

您必须将继承包装在一个正确处理克隆的具体容器类中。

您还必须考虑一个分配器必须比较其复制的复杂性。