gpt4 book ai didi

c++ - 自定义 std::allocator_traits::construct

转载 作者:行者123 更新时间:2023-11-30 04:41:59 29 4
gpt4 key购买 nike

我想定制std::vector不默认构造元素类型的行为(例如 int ),因为对大型 vector 执行此操作的成本很高。

看看这个,我能看到的唯一方法就是专门化 std::allocator_traits<MyAllocator>::construct .然而,这似乎是不可能的,因为特化必须在与原始声明相同的 namespace 中。

特化 namespace std已经不对了。实际上比这更糟,因为我使用的 STL 实现实际上把 std::allocator_traitsnamespace std::__u (这在 STL 实现中肯定会有所不同),所以这样做似乎是非常错误的。

这很令人困惑,因为 std::allocator_traits 似乎旨在允许专门化,但我无法弄清楚如何真正做到这一点。这只是一个坏主意吗?如果是这样,是否有其他方法可以解决问题(避免在 STL 容器中默认构造元素)?

最佳答案

特化标准库特征类不仅是允许的,而且是提供此类功能的主要方式。但是,在这种特殊情况下,这是不必要的。

默认std::allocator_traits<T>::construct实现(其中 T 是您的分配器类型,而不是它所使用的容器的值类型)将调用 construct T 的成员函数如果T有这样一个功能,它调用placement- new如果T没有合适的成员。所以简单地给你的分配器一个 construct成员(member),你应该没问题。

关于c++ - 自定义 std::allocator_traits::construct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58985619/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com