23得票1回答
为什么在C++17中std::allocator失去了成员类型/函数?

在查看 std::allocator 时,我发现以下成员已被弃用: value_type、 pointer、 const_pointer、 reference、 const_reference、 size_type、 difference_type 和 rebind。 分配器也不再拥有以下成...

23得票3回答
shared_ptr的删除器是否存储在自定义分配器分配的内存中?

假设我有一个带有自定义分配器和自定义删除器的shared_ptr。 我在标准中找不到任何关于删除器应该存储在哪里的说明:它没有说自定义分配器将用于删除器的内存,也没有说它不会使用。 这是未指定的还是我遗漏了什么?

21得票1回答
数组中没有元素的对齐方式

C++允许动态分配大小为零的数组:int* p = new int[0]; delete[] p; 由于该数组没有元素,因此我无法对这样的指针进行太多操作,但是需要使用new表达式返回一个有效(!= nullptr)的指针,然后我必须像操作实际数组一样再次使用delete[]删除它。 这样的n...

21得票2回答
如何使用自定义分配器创建std :: function?

假设我有一个名为MyAlloc的自定义分配器,并已成功地将其与std::vector<int>一起使用,以节省一些代码,如下所示: std::vector<int,MyAlloc<int>> vec; 现在我希望使用自定义分配器将lambda保存到std ...

19得票5回答
为什么std::allocator::deallocate需要一个大小参数?

std::allocator是基于底层内存模型的抽象,封装了调用new和delete的功能。 delete没有大小要求,但deallocate()则需要传入大小。 void deallocate( T* p, std::size_t n ); "参数 n 必须等于最初生成 p 的 a...

19得票7回答
C++向量,在堆栈上扩展/重新分配时会发生什么?

我是C++的新手,正在我的项目中使用vector类。我发现这很有用,因为我可以拥有一个数组,每当需要时它会自动重新分配内存空间(例如,如果我想要添加一个元素到vector中,而且vector已经达到了它的最大容量,它就会向操作系统请求更多的内存空间),所以访问vector的元素非常快速(不像列...

18得票2回答
std::allocator<void>的弃用

相关内容:为什么标准容器要求allocator_type::value_type必须是元素类型? 据说以下内容自C++17起已被弃用:template&lt;&gt; struct allocator&lt;void&gt;; 我想知道它是否被弃用,因为主要模板现在已经能够容纳allocat...

18得票1回答
在具有预分配块的自定义STL分配器中重新绑定

我将构建一个自定义分配器,预先分配一个大块(数组)用于存储某个类T的N个元素,然后只需增加数组内的索引以处理分配请求。 由于我不希望对预分配块中的元素进行任何初始化,因此以下内容不可行: T buffer[N]; 因为在这种情况下,T的构造函数将被调用N个块元素。 由于我理解std:...

18得票1回答
如何在现代C++中使用分配器(Allocators)

根据我在http://en.cppreference.com/w/cpp/memory/allocator上所读到的,大多数分配器功能现在将被弃用。问题是,新代码应该如何使用分配器?现在什么是“正确”的方法? 根据文档,我推断construct是分配器特性的一部分,而不是分配器本身。 我正...

17得票1回答
分配器应该使用 construct() 进行默认初始化,而不是值初始化吗?

作为这个问题的后续,根据[default.allocator]的规定,必须将默认分配器(std::allocator&lt;T&gt;)的construct实现如下: template &lt;class U, class... Args&gt; void construct(U* p, ...