我想定制std::vector
不默认构造元素类型的行为(例如int
),因为对于大向量来说这样做的成本很高。
看着这个,我认为做到这一点的唯一方法就是专业化std::allocator_traits<MyAllocator>::construct
。但是,这似乎不可能,因为专业化必须与原始声明位于同一名称空间中。
专注于namespace std
似乎已经不对了。实际上比这更糟糕,因为我使用的 STL 实现实际上把std::allocator_traits
in namespace std::__u
(这肯定会因 STL 实现而异),因此这样做似乎是非常错误的。
这很令人困惑,因为 std::allocator_traits 的设计似乎是为了允许专业化,但我不知道如何实际做到这一点。这是一个坏主意吗?如果是这样,是否有其他方法可以解决该问题(避免 STL 容器中元素的默认构造)?
专门化标准库特征类不仅是允许的,而且是提供此类功能的主要方式。然而,在这种特殊情况下,这是不必要的。
默认std::allocator_traits<T>::construct
实施(其中T
是你的分配器类型,而不是正在使用的容器的值类型)将调用construct
的成员函数T
if T
有这样一个函数,它调用placement-new
if T
没有合适的成员。所以只需给你的分配器一个construct
会员,你应该没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)