#include <vector>
#include <functional>
int main(int argc, char** argc)
{
std::vector<int> x;
std::function<void (void)> f(std::allocator_arg,x.get_allocator());
return 1;
}
使用:g++ test.cpp -o test -std=c++11
它在我的Ubuntu 15
g++ version is 5.2.1
上失败了。 XCode
和VS2015
都可以。我检查/usr/include/c++/5/functional
,它没有分配器的构造函数。我检查www.cplusplus.com
,它用allocator定义构造函数。
有人可以告诉我如何解决这个问题,或者我必须改变g ++ stl,
如何用其他stl更改g ++ stl?我已经下载了sgi stl源代码
请帮忙 !非常感谢。
答案 0 :(得分:2)
在std::function
中使用分配器有很多问题。
What's the point of std::function constructor with custom allocator but no other args?
http://cplusplus.github.io/LWG/lwg-closed.html#2386
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0302r0.html
查看g ++ functional
源代码,它显然没有使用任何分配器construct
进行动态分配,它明显使用new
和delete
。
所以,我不确定如何提供分配器来进行堆分配。但是,一个坏主意是从function
派生并重载new
和delete
运算符。我建议你 NOT 走这条路。这是一个非常 BAD 的想法。