allocator相关内容

拼接具有不同分配器的列表中的列表元素时,为什么会出现错误消息?以及如何解决?

你好,我试图将元素从(end()-1)的一个列表(在示例foo中)转移/移动到另一个列表(在示例中称为bar)中以定位begin()。 唯一的问题是列表中的一个正在使用定制的分配器。 可能导致以下错误消息: ../ src / TestAllocator.cpp:120:28:错误: 没有用于调用 'std :: list :: splice(std :: _ List ..
发布时间:2020-09-28 00:42:15 C/C++开发

C ++有状态分配器解除分配问题

这个问题是我对标准如何使用自定义分配器的误解。我有一个有状态的分配器,它保持分配的块的向量。此向量在分配时被推入,并在解除分配期间进行搜索。 从我的调试看来,对象的不同实例(这是不同的)在取消分配时被调用。一个示例可能是调用MyAllocator(this * = 1)分配20个字节,然后一段时间后调用MyAllocator(this * = 2)取消分配先前分配的20个字节。显然,MyAl ..
发布时间:2020-09-28 00:04:44 其他开发

从std :: vector接管内存

我使用一个处理大量数据的外部库。数据由原始指针加上长度传递。该库不声明指针的所有权,而是在处理完数据后调用提供的回调函数(具有两个相同的参数)。 数据已准备就绪通过使用 std :: vector 方便,我宁愿不放弃这种便利。复制数据完全是不可能的。因此,我需要一种方法来“接管” std :: vector 所拥有的内存缓冲区,然后在回调中将其释放。 / p> 我当前的 ..
发布时间:2020-09-27 21:37:11 C/C++开发

当涉及分配器时,是否有类似于“复制和交换”的用法?

关于复制和交换习惯用法,有两个很好的答案,例如,解释复制并交换习惯用语和解释移动语义。适用于复制和移动分配的基本习惯用法如下: T& T :: operator =(Tother){ this-> swap(other); return * this; } 此分配对复制和移动分配均有效,因为其他是复制的还是移动的,具体取决于赋值的右侧是左值还是右值。 现 ..
发布时间:2020-09-27 20:19:19 C/C++开发

分配失败时,C ++ allocator :: allocate抛出还是返回nullptr?

分配器概念和 std :: allocator_traits 不说 allocate 会做什么 当我使用标准分配器API编写容器时,应该 检查返回值并在 noexcept 版本成员函数中捕获异常(例如 push_back ,调整大小 ...); 检查返回值并抛出异常,如果失败则抛出该异常 这样,无论是否抛出异常得到正确的行为。 解决方案 草稿n4659(对于C ++ ..
发布时间:2020-09-27 03:40:45 C/C++开发

给定对副本构造的要求,如何在C ++ 11中编写有状态的分配器?

据我所知,C ++ 11标准第17.6.3.5节的表28列出了与STL 容器一起使用的分配器的要求。 我对其中一些需求之间的相互作用有些困惑。 给定类型 X 是类型 T 的分配器,类型 Y ,即类型 U ,实例 a 对应分配器类” c>, a1 和 a2 的 X ,以及实例 b 为 Y 的实例,该表显示: 表达式 a1 == a2 的计算结果为 true 只有从 a1 分配的 ..
发布时间:2020-09-26 22:48:06 C/C++开发

基于堆栈缓冲区的STL分配器?

我想知道是否有一个符合C ++标准库的分配器是否使用驻留在堆栈上的(固定大小的)缓冲区是可行的。 以某种方式,尽管在其他地方隐式回答了 ,但似乎还没有这样问这个问题。 基本上,就我的搜索而言,似乎应该可以创建使用固定大小缓冲区的分配器。现在,乍看之下,这应该意味着 也应该有一个分配器,该分配器使用固定大小的缓冲区,该缓冲区在栈中“存活”,但它确实出现 让我举一个例子说明我的意思: ..
发布时间:2020-09-26 21:41:55 C/C++开发

std :: list in boost :: interprocess :: managed_shared_memory

最近,我上学了,并了解了在boost::interprocess::managed_shared_memory段中包含unordered_map的正确方法.到目前为止,一切都很好,但是我将需要添加更多的STL容器. 理想情况下,我希望能够对任何STL容器遵循相同的规则.现在,我需要 std::list .我不能使它工作.不过,我可以使 std::vector 起作用. std :: v ..
发布时间:2020-09-22 06:24:55 C/C++开发

有BOOST池固定大小的分配器吗?

我想创建unordered_map(因为我特别想要一个哈希图).我想在一开始分配其最大大小(根据我的约束). 因此,如果我要分配256个条目,并且每个条目的大小为1B(仅作为示例.假设1Byte包含键和值).然后,我的unordered_map键和条目的总大小为256B.我想在分配器中预分配256B. 然后,当unordered_map调用allocate()/deallocate()时,al ..
发布时间:2020-09-22 05:49:20 C/C++开发

如何使用boost :: pool库创建自定义内存分配器

我是Boost的新手,我想知道boost :: pool库到底能如何帮助我创建自定义内存分配器. 而且我有两个向量的struct对象. 第一个向量的结构类型为A,而第二个向量的结构类型为B. 如何将分配给第一个向量的内存重用到第二个向量. 解决方案 Boost Pool是定义一些分配器类型的库. 很明显,该库的重点是提供池分配器. 当分配相同大小的对象时,池分配器会发光. ..
发布时间:2020-07-29 21:36:34 C/C++开发

std :: list如何分配节点与元素

std::list如何分配保留next/prev指针和其中包含的T元素的节点? 我认为标准分配器只能用于分配一种类型的内存(因为std::allocator::allocate以sizeof(T)的增量分配内存).因此,似乎不可能以单一分配方式分配列表节点和所包含的对象,这意味着必须根据实现决定,对节点进行分配,并且节点存储指向对象的指针,而不是对象本身,这意味着从指针到列表节点到它所包含的 ..
发布时间:2020-07-10 01:10:19 C/C++开发

可识别分配器的`std :: array`样式的容器?

我正在编写一些处理密码秘密的代码,并创建了std::pmr::memory_resource的自定义ZeroedMemory实现,该实现可处理释放时的内存清理并使用必须使用的魔术进行封装,以防止优化编译器被淘汰离开手术.这样做的目的是避免专门化std::array,因为缺少虚拟析构函数意味着在类型擦除之后进行破坏会导致释放内存而不进行清理. 不幸的是,我后来才意识到std::array不是A ..
发布时间:2020-07-10 01:00:21 C/C++开发

是否可以在MFC应用程序的调试版本中替换内存分配器?

我想在其中的电子围栏中使用MFC应用程序.我想跟踪new/delete,如果我可以跟踪malloc/free,那将是一个额外的奖励. 不幸的是,MFC重新定义了new和delete-但是使用了宏(DEBUG_NEW)-因此我无法使用重新定义它们的标准C ++方法. (MFC将它们定义为具有不同的签名,并将源文件和行号作为附加参数). 有没有办法强制所有new/delete通过我的分配器 ..
发布时间:2020-05-08 22:28:01 C/C++开发