- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想这个问题真的是关于 std::allocator_traits
的设计的并提供自定义分配器。如果我想构造一个 std::shared_ptr<>
使用自定义分配器,我可以使用 std::allocator_traits 吗?
基本上,这是正确的吗?
WidgetAllocator allocator;
std::shared_ptr<Widget> widget(allocator.allocate(), std::allocator_traits<WidgetAllocator>::deallocate);
最佳答案
Basically, is this correct?
std::shared_ptr<Widget> widget(allocator.allocate(), std::allocator_traits<WidgetAllocator>::deallocate);
这是不正确的。
首先,不保证分配器具有空的allocate
成员函数。
好吧,让我们假设 WidgetAllocator
确实提供了这样的重载,尽管这对于分配器来说并不是很典型。但更重要的是,std::allocator_traits::deallocate
不能用 Widget*
调用。它的参数列表是( Alloc& a, pointer p, size_type n )
。
So what's the recommended use of allocator_traits?
只要您想使用分配器的可选功能之一,例如Alloc::is_always_equal
,您就应该使用std::allocator_traits
,并且您要使用的分配器不提供可选功能,或者分配器是模板参数,并且您希望支持所有分配器,无论它们是否提供可选功能。
std::allocator_traits
为分配器的可选功能提供默认实现。
Should I be invoking methods on the allocator directly?
您可以直接调用成员函数,如果您使用的分配器提供它们,或者在一般情况下,如果它们是非可选的。不过,直接调用成员不是必需的,您始终可以使用分配器特征。
关于c++ - 是 allocator_traits::deallocate 一个有效的 shared_ptr 删除器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074865/
C++11 提供了 std::allocator_traits 类作为使用分配器的标准方式。静态函数 std::allocator_traits::construct() 将一个指针 指向应该构造对象
using namespace std::rel_ops; template > class my_vector { public: typedef A
如果Allocator符合标准库分配器接口(interface),调用std::allocator_traits::deallocate是否安全用空指针?我知道是什么时候 Allocator是std:
std::allocator_traits当我提供一个带有单个模板参数的分配器的 STL 样式容器时,它会自动发挥它的魔力,但当我提供一个带有两个模板参数但其他方面相似的分配器的 STL 样式容器时,
我想设计一个类模板,它采用分配器类型(如标准第 17.6.3.5 节中所定义)作为模板参数。我怎么看std::allocator_traits有助于填补 A 的任何缺失成员使用默认设置。除此之外,标准
我想定制std::vector不默认构造元素类型的行为(例如 int ),因为对大型 vector 执行此操作的成本很高。 看看这个,我能看到的唯一方法就是专门化 std::allocator_tra
受到 Haskell 的启发,我尝试像这样实现 std::forward_list: namespace std { template > class forward_list {
分配器可以选择嵌套类型,如 pointer , const_pointer .但是可以始终将这些接口(interface)与 std::allocator_traits 一起使用,如果这些类型在 Al
我正在尝试实现一个 STL 风格的容器类,我有一个关于在我的类中使用分配器的问题: STL 的 allocator_traits 中的静态成员函数有何用途? 直到现在,我认为我应该实例化 alloca
我不了解 C++ 11 中的 allocator_traits,所以我尝试了 allocator_traits exmple来自 cplusplus 网站。但是,此代码无法在 gcc 4.9、VS 2
我有一个结构定义为: struct Foo { double x; double y; }; 我有一个将这个结构作为参数的函数: void doSomethingWithFoo(Foo
我很想理解boost::container::allocator_traits当我遇到 boost::container::allocator_traits::is_partially_propaga
下面的代码可以正常编译: #include #include int main() { const int * a = new int(5); std::cout >; auto alloc =
我想这个问题真的是关于 std::allocator_traits 的设计的并提供自定义分配器。如果我想构造一个 std::shared_ptr<>使用自定义分配器,我可以使用 std::alloca
为什么 C++0x 无序关联容器不使用 allocator_traits 来定义它们的成员类型 pointer 和 const_pointer? 例如,顺序关联容器和有序关联容器使用以下定义: typ
我正在尝试重新绑定(bind)我的自定义分配器类型,MyAllocator , 用于 basic_string类,例如: std::basic_string, MyAllocator> ... 分配器
为什么没有标准 C++03 接口(interface)用于查询 C++0x 中使用的分配器的成员类型?成员类型不足的用例有哪些? 最佳答案 为了从设计模式的角度解释 allocator_traits,
根据 http://en.cppreference.com/w/cpp/concept/Allocator ,一个可以用作分配器类型的类必须满足许多要求。但是,我找不到 C++ 标准指定的相同要求。该
我是一名优秀的程序员,十分优秀!