根据我在http://en.cppreference.com/w/cpp/memory/allocator上所读到的,大多数分配器功能现在将被弃用。问题是,新代码应该如何使用分配器?现在什么是“正确”的方法?
根据文档,我推断construct
是分配器特性的一部分,而不是分配器本身。
我正在构建一个自定义容器,这里是一个非常简单版本的构造函数,这是新设计的良好使用吗?
container::container(std::size_t size, T const& value, Allocator const& allocator) : allocator_(allocator){
data_ = std::allocator_traits<Alloc>::allocate(allocator_, size);
for(auto ptr = data_; ptr != data_ + size; ++ptr){
std::allocator_traits<Allocator>::construct(allocator_, ptr, value)
}
}
我尝试在循环中使用算法(例如std::for_each
),但是我没有成功地使用一个而不需要取地址(operator&
)。
我在哪里可以找到一个现代分配器的完整示例?
经过一些调整,我找到了一种使用算法而不是原始循环的方法(可以传递执行策略给它)。我不是很确定,但可能是这个:
data_ = std::allocator_traits<Allocator>::allocate(allocator_, size);
std::for_each([policy? deduced from allocator?,]
boost::make_counting_iterator(data_),
boost::make_counting_iterator(data_ + size),
[&](auto ptr){std::allocator_traits<Allocator>::construct(allocator_, ptr, value);}
);
for
循环条件有点问题)。C++17 除了弃用一堆本不应调用的函数之外,没有任何变化。另外,没有construct_n
函数。 - T.C.std::for_each
?(哪种方式) - alfC