allocator

    1热度

    1回答

    语境: 我想创造出模仿std::allocator(不是从派生的自定义分配器)在某些方面,但允许实例分配器。我的通用容器具有构造函数,它允许用户指定一个指向对象的自定义指针。当没有指定分配器时,我希望它默认为来自摘要Allocator类的单例NewDeleteAllocator。这仅包含全球new和delete运营商。这个想法取自Pablo Halpern的Towards a Better All

    1热度

    2回答

    我写了一个自定义分配器。然而,当我将list.sort()添加到main()中时,Clang/LLVM编译器开始抱怨我的分配器初始化的构造函数不匹配。 虽然代码是有点长,这是最低的可行片段: #include <iostream> #include <ctime> #include <list> #include <limits> template<typename T, int sta

    0热度

    1回答

    我是C新手,我对分配器可以在C中做什么感到困惑。 就像问题一样,如果需要,分配器可以使用未初始化的数据段满足堆请求吗?

    17热度

    1回答

    C++ 17将带给我们​​这是一个干净的接口来分配和释放内存。不像Allocator的概念,它只是只是,没有别的。还会有一个std::pmr::polymorphic_allocator,它将一个内存资源包装到一个经典的分配器中,以便它可以与现有的容器一起使用。 如果我要写一个新的容器(或其他消耗内存)型瞄准C++ 17后,我应该继续对分配器概念编程或直接,而使用新的和更清洁的抽象? 截至目前,我

    3热度

    2回答

    例如,来自的std ::双端队列::运算=在C++参考: (1)复印分配(常量的std ::双端队列&其他) 替换内容与其他的内容的副本。 如果 std :: allocator_traits :: propagate_on_container_copy_assignment()为 为true,则目标分配器将被替换为源 分配器的副本。如果目标分配器和源分配器不相比 相等,则使用目标(* this)

    2热度

    1回答

    我最近对std::allocator有一些兴趣,认为它可能解决我在C++代码上做出的一些设计决策时遇到的问题。 现在我已阅读了一些关于它的文档,观看了一些视频,如Andrei Alexandrescu's one at CppCon 2015,我现在基本上明白我不应该使用它们,因为它们不是按照我认为分配器可以工作的方式工作。 这就是说,在实现这个之前,我写了一些测试代码来了解std::alloca

    1热度

    2回答

    假设我有一个分配器my_allocator,当调用allocate(n)时,它将始终为n+x(而不是n)元素分配内存。 我可以savely承担的范围内[data()+n, data()+n+x)内存(对于std::vector<T, my_allocator<T>>)可访问/有效期为进一步利用基本面的情况下(即放置新的或SIMD加载/存储(只要没有重新分配)? 注意:我知道过去data()+n-1

    0热度

    1回答

    我一直在试图编写自己的STL容器的实现来练习,而且我在取消分配元素时遇到了一些麻烦。我创建了一个简单的Array类,它基本上是标准C++数组的封装。我一直试图实现的重大改变是允许数组初始化,如果他们没有默认的构造函数(我知道Vectors可以做到这一点,但我想实践它)。由于此功能,我不能使用new,所以我决定让容器使用像标准STL容器一样的Allocator。该Array看起来有点像这样: tem

    2热度

    1回答

    根据当前标准(20.7.9),std::allocator具有被设置为true_type成员propagate_on_container_move_assignment: 模板类分配器 { 公共: 的typedef为size_t SIZE_TYPE; typedef ptrdiff_t difference_type; typedef T *指针; typedef const T * const_

    0热度

    1回答

    我写了一个简单的虚拟分配的vector<>,这样我可以使用vector<>作为堆栈数组的包装,像这样:只有在调试 #include <vector> #include "stdio.h" #include "stack_allocator.h" using namespace std; int main() { int buffer[100]; vector<int