gpt4 book ai didi

c++ - 为什么这个 C++ STL 分配器不分配?

转载 作者:IT老高 更新时间:2023-10-28 23:17:43 25 4
gpt4 key购买 nike

我正在尝试编写一个从 std::allocator 派生的自定义 STL 分配器,但不知何故,所有对 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 中得到相同的结果。

最佳答案

您将需要提供重新绑定(bind)成员模板和 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);
// ...
}

如果不存在正确的重新绑定(bind)模板,或者不存在相应的复制构造函数,则代码将失败。猜测需求是什么,您将毫无用处。迟早您将不得不处理依赖于这些分配器要求的一部分的代码,并且代码将失败,因为您的分配器违反了它们。我建议您在 20.1.5 中的标准拷贝的一些工作草案中查看它们.

关于c++ - 为什么这个 C++ STL 分配器不分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com