我正在尝试编写一个派生自的自定义 STL 分配器std::allocator
,但不知何故所有的电话allocate()
去基础班。我已将范围缩小到以下代码:
template <typename T> class a : public std::allocator<T> {
public:
T* allocate(size_t n, const void* hint = 0) const {
cout << "yo!";
return 0;
}
};
int main()
{
vector<int, a<int>> v(1000, 42);
return 0;
}
我期待“哟!”打印出来,然后出现一些可怕的错误,因为我实际上没有分配任何东西。相反,程序运行良好并且不打印任何内容。我究竟做错了什么?
我在 gcc 和 VS2008 中得到相同的结果。
您将需要提供重新绑定成员模板以及 C++ 标准分配器要求中列出的其他内容。例如,您需要一个模板复制构造函数,它不仅接受allocator<T>
但是也allocator<U>
。例如,一段代码可能会这样做,例如 std::list 可能会这样做
template<typename Allocator>
void alloc1chunk(Allocator const& alloc) {
typename Allocator::template rebind<
wrapper<typename Allocator::value_type>
>::other ot(alloc);
// ...
}
如果不存在正确的重新绑定模板,或者不存在相应的复制构造函数,则代码将失败。猜测需求是什么是没有用的。迟早,您将不得不处理依赖于这些分配器要求的一部分的代码,并且该代码将会失败,因为您的分配器违反了这些要求。我建议您在您的标准副本中的一些工作草案中查看它们20.1.5
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)