allocator相关内容
在查看 std :: allocator 时,我看到了以下成员: value_type , 指针, const_pointer , 引用, const_reference , size_type , difference_type 和 rebind 已全部弃用。 分配者也将不再具有成员: 地址, max_size ,构造或破坏。 为什么会这样? 解决方案
..
你好,我试图将元素从(end()-1)的一个列表(在示例foo中)转移/移动到另一个列表(在示例中称为bar)中以定位begin()。 唯一的问题是列表中的一个正在使用定制的分配器。 可能导致以下错误消息: ../ src / TestAllocator.cpp:120:28:错误: 没有用于调用 'std :: list :: splice(std :: _ List
..
这个问题是我对标准如何使用自定义分配器的误解。我有一个有状态的分配器,它保持分配的块的向量。此向量在分配时被推入,并在解除分配期间进行搜索。 从我的调试看来,对象的不同实例(这是不同的)在取消分配时被调用。一个示例可能是调用MyAllocator(this * = 1)分配20个字节,然后一段时间后调用MyAllocator(this * = 2)取消分配先前分配的20个字节。显然,MyAl
..
我使用一个处理大量数据的外部库。数据由原始指针加上长度传递。该库不声明指针的所有权,而是在处理完数据后调用提供的回调函数(具有两个相同的参数)。 数据已准备就绪通过使用 std :: vector 方便,我宁愿不放弃这种便利。复制数据完全是不可能的。因此,我需要一种方法来“接管” std :: vector 所拥有的内存缓冲区,然后在回调中将其释放。 / p> 我当前的
..
关于复制和交换习惯用法,有两个很好的答案,例如,解释复制并交换习惯用语和解释移动语义。适用于复制和移动分配的基本习惯用法如下: T& T :: operator =(Tother){ this-> swap(other); return * this; } 此分配对复制和移动分配均有效,因为其他是复制的还是移动的,具体取决于赋值的右侧是左值还是右值。 现
..
我试图对 std :: vector 使用自定义分配器,但是我注意到 std :: vector 不需要/使用我的分配器中的任何成员函数。 #include 结构A:私有std :: allocator { typedef std :: allocator分配 使用alloc :: value_type; 使用alloc
..
分配器概念和 std :: allocator_traits 不说 allocate 会做什么 当我使用标准分配器API编写容器时,应该 检查返回值并在 noexcept 版本成员函数中捕获异常(例如 push_back ,调整大小 ...); 检查返回值并抛出异常,如果失败则抛出该异常 这样,无论是否抛出异常得到正确的行为。 解决方案 草稿n4659(对于C ++
..
据我所知,C ++ 11标准第17.6.3.5节的表28列出了与STL 容器一起使用的分配器的要求。 我对其中一些需求之间的相互作用有些困惑。 给定类型 X 是类型 T 的分配器,类型 Y ,即类型 U ,实例 a 对应分配器类” c>, a1 和 a2 的 X ,以及实例 b 为 Y 的实例,该表显示: 表达式 a1 == a2 的计算结果为 true 只有从 a1 分配的
..
此处是 cppreference 上的文档,此处是工作草案。 我必须承认我不了解 polymorphic_allocator 的真正目的是什么以及何时/为什么/如何使用它。 例如, pmr :: vector 具有以下签名: 命名空间pmr { template 使用vector = std :: vector
..
我想知道是否有一个符合C ++标准库的分配器是否使用驻留在堆栈上的(固定大小的)缓冲区是可行的。 以某种方式,尽管在其他地方隐式回答了 ,但似乎还没有这样问这个问题。 基本上,就我的搜索而言,似乎应该可以创建使用固定大小缓冲区的分配器。现在,乍看之下,这应该意味着 也应该有一个分配器,该分配器使用固定大小的缓冲区,该缓冲区在栈中“存活”,但它确实出现 让我举一个例子说明我的意思:
..
最近,我上学了,并了解了在boost::interprocess::managed_shared_memory段中包含unordered_map的正确方法.到目前为止,一切都很好,但是我将需要添加更多的STL容器. 理想情况下,我希望能够对任何STL容器遵循相同的规则.现在,我需要 std::list .我不能使它工作.不过,我可以使 std::vector 起作用. std :: v
..
我正在使用外部库(pcl),因此我需要一个不更改现有函数原型的解决方案. 我正在使用的一个函数会生成一个std::vector>.我接下来要调用的函数需要一个const boost::shared_ptr>>.我不想复制这些元素,因为它已经在我的代码
..
我想创建unordered_map(因为我特别想要一个哈希图).我想在一开始分配其最大大小(根据我的约束). 因此,如果我要分配256个条目,并且每个条目的大小为1B(仅作为示例.假设1Byte包含键和值).然后,我的unordered_map键和条目的总大小为256B.我想在分配器中预分配256B. 然后,当unordered_map调用allocate()/deallocate()时,al
..
我是Boost的新手,我想知道boost :: pool库到底能如何帮助我创建自定义内存分配器. 而且我有两个向量的struct对象. 第一个向量的结构类型为A,而第二个向量的结构类型为B. 如何将分配给第一个向量的内存重用到第二个向量. 解决方案 Boost Pool是定义一些分配器类型的库. 很明显,该库的重点是提供池分配器. 当分配相同大小的对象时,池分配器会发光.
..
std::list如何分配保留next/prev指针和其中包含的T元素的节点? 我认为标准分配器只能用于分配一种类型的内存(因为std::allocator::allocate以sizeof(T)的增量分配内存).因此,似乎不可能以单一分配方式分配列表节点和所包含的对象,这意味着必须根据实现决定,对节点进行分配,并且节点存储指向对象的指针,而不是对象本身,这意味着从指针到列表节点到它所包含的
..
我正在编写一些处理密码秘密的代码,并创建了std::pmr::memory_resource的自定义ZeroedMemory实现,该实现可处理释放时的内存清理并使用必须使用的魔术进行封装,以防止优化编译器被淘汰离开手术.这样做的目的是避免专门化std::array,因为缺少虚拟析构函数意味着在类型擦除之后进行破坏会导致释放内存而不进行清理. 不幸的是,我后来才意识到std::array不是A
..
在容器中具有这些特征的原因是什么( https://en .cppreference.com/w/cpp/memory/allocator_traits ) propagate_on_container_copy_assignment Alloc::propagate_on_container_copy_assignment if present, otherwise std::false
..
我想在其中的电子围栏中使用MFC应用程序.我想跟踪new/delete,如果我可以跟踪malloc/free,那将是一个额外的奖励. 不幸的是,MFC重新定义了new和delete-但是使用了宏(DEBUG_NEW)-因此我无法使用重新定义它们的标准C ++方法. (MFC将它们定义为具有不同的签名,并将源文件和行号作为附加参数). 有没有办法强制所有new/delete通过我的分配器
..
给出一个无状态的自定义分配器A(例如,竞技场分配器,绑定到一些运行时已知大小的连续内存块)和类S,其中包含struct S { A() = default; // another c-tors std::vector v; std::shared_ptr s; }; 我想将A用于类S的子集(或什至全部) AllocatorAwareContainer 字段.显然,我应该为
..
允许同时使用free(NULL)和::operator delete(NULL).分配器概念(例如std :: allocator)是否也允许deallocate(NULL,1),还是需要您自己保护? 解决方案 您需要添加自己的支票. 根据§20.4.1.1/8,deallocate要求: p应该是从allocate()获得的指针值. n应等于传递的值 调用分配的第一个参数返回
..