相关疑难解决方法(0)

polymorphic_allocator:何时以及为什么要使用它?

是关于cppreference的文档,是工作草案.

我必须承认,我不明白什么是真正的目的,polymorphic_allocator何时/为什么/如何使用它.
例如,pmr::vector具有以下签名:

namespace pmr {
    template <class T>
    using vector = std::vector<T, polymorphic_allocator<T>>;
}
Run Code Online (Sandbox Code Playgroud)

什么是polymorphic_allocator要约?std::pmr::vector对老式的提供有什么好处std::vector?我现在能做什么才能做到现在为止?
分配器的真正目的是什么?我应该何时使用它?

c++ allocator c++17

87
推荐指数
3
解决办法
1万
查看次数

在具有不同分配器的向量之间转换

我编写了一个简单的C++ 11样式的有状态分配器类型.特定

template<typename T> class my_allocator {
   // the usual stuff
};

template<typename T> using my_vector = std::vector<T, my_allocator<T>>;

my_vector<int> x;

std::vector<int> y = x; // error
Run Code Online (Sandbox Code Playgroud)

什么是允许从转换的最佳方式my_vectorstd::vector使用默认的分配?GCC 4.7(最近的svn)说

error: conversion from 'my_vector<int> {aka std::vector<int, my_allocator<int>>}' to non-scalar type 'std::vector<int>' requested

显然,这可以通过简单的转换函数来完成,例如

template<typename T> std::vector<T> to_std_vec(const my_vector<T>& v)  {
   return std::vector<T>(&v[0], &v[v.size()]);
   }
Run Code Online (Sandbox Code Playgroud)

但这看起来非常不优雅.在C++ 11中有更好的解决方案吗?

当然,在这种情况下,移动语义是正确的,但我希望复制构造和分配工作而不会产生额外的噪音/打字.

c++ allocator c++11

9
推荐指数
2
解决办法
2750
查看次数

标签 统计

allocator ×2

c++ ×2

c++11 ×1

c++17 ×1