allocator

    0熱度

    1回答

    我試圖找出如何使用升壓:: circular_buffer下面的構造: circular_buffer(capacity_type buffer_capacity, size_type n, const_reference item, const allocator_type& alloc = allocator_type()); 我有一個自定義類: template<class T> cla

    8熱度

    1回答

    我目前正在編寫一個池分配器。我的問題歸結爲以下代碼: template <typename T> union myUnion { T data; myUnion<T>* nextUnion; }; void someFunction(){ myUnion<T> mu; T* t = new (std::addressof(mu.data)) T();

    0熱度

    1回答

    這個問題是我對標準如何使用我的自定義分配器的誤解。我有一個有狀態的分配器,保持分配塊的向量。在分配期間分配和搜索時,此向量被推入。 從我的調試看來,我的對象的不同實例(這*不同)正在調用解除分配。一個例子可能是調用MyAllocator(this * = 1)來分配20個字節,然後稍後調用MyAllocator(this * = 2)來取消分配前面分配的20個字節。很明顯,MyAllocator中

    0熱度

    1回答

    考慮下面的函數簽名 void foo(std::vector<int> &bar); 和自定義分配器CustomAlloc,調用foo與std::vector<int, CustomAlloc>結果的情況下在 could not convert ‘bar’ from ‘std::vector<int, CustomAlloc<int, [...] >}’ to ‘std::vector<int

    2熱度

    2回答

    我目前正在使用C++中的自定義分配器。這個分配器必須定期對內存進行碎片整理,移動內存和物體。這些移位總是向下,這意味着移動的內存塊的地址在移動時總是減少。當舊內存塊和新內存塊不重疊時,這樣做沒有問題。如果它們重疊,我首先必須將對象移動到分配器內存之外的臨時區域,然後將其移回新的內存塊。 如果移動類型的std :: is_trivially_move_constructible爲true,那麼如果在

    5熱度

    1回答

    我正在使用外部庫(pcl),所以我需要一個不會更改現有函數原型的解決方案。 我正在使用的一種功能會生成一個std::vector<int, Eigen::aligned_allocator<int>>。我想調用的函數接下來需要一個const boost::shared_ptr<std::vector<int, std::allocator<int>>>。我不想複製元素,因爲它在我的代碼中已經很慢的

    7熱度

    1回答

    在我的日常工作中,我總是被團隊的高級成員建議,該列表不是緩存友好的,所以我應該vector。我知道list不是連續的,因此內存分配分散在整個內存中。 但是,我經常需要list(或map)的功能。所以我想知道我是否可以編寫我自己的分配器,這是一個下面的vector。每當我push_back時,我自己的分配器將從每個分配的vector中分配一個新項目。 當我旅行list/map時,緩存位置被保留。 這

    4熱度

    1回答

    我正在寫一個分配器,引用另一個跟蹤分配字節數的類的實例。 下面是我試圖做的一個簡單的例子(改編自here),只是沒有整個內存跟蹤類,而是我引用了一些int,它收集到目前爲止分配的字節數。該參考被分配內部主,應傳遞給CustomAllocator: #include <limits> // numeric_limits #include <iostream> #include <typeinfo

    0熱度

    1回答

    這個問題與thesethreequestions有關。 我試圖使用固定長度的數組作爲密鑰到std::map,如下面的非編譯代碼證實: #include <cstdlib> #include <iostream> #include <map> typedef char myuuid[ 16 ]; template <class T> class MyAlloc { public:

    1熱度

    1回答

    特別是,爲什麼我們的 template<typename T, typename A = allocator<T>> class vector { A alloc; //... }; ,而不是 template<typename T> class vector { allocator<T> alloc; //... }; 我在C++手動看