为什么g ++不支持在Ubuntu上使用allocator构造函数?

时间:2016-06-13 05:40:06

标签: c++ c++11 ubuntu stl

#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上失败了。 XCodeVS2015都可以。我检查/usr/include/c++/5/functional,它没有分配器的构造函数。我检查www.cplusplus.com,它用allocator定义构造函数。
有人可以告诉我如何解决这个问题,或者我必须改变g ++ stl, 如何用其他stl更改g ++ stl?我已经下载了sgi stl源代码 请帮忙 !非常感谢。

1 个答案:

答案 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进行动态分配,它明显使用newdelete

所以,我不确定如何提供分配器来进行堆分配。但是,一个坏主意是从function派生并重载newdelete运算符。我建议你 NOT 走这条路。这是一个非常 BAD 的想法。