首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在C++17中不推荐使用rebind<U>::other,而在C++20中将其删除?

在C++17中不推荐使用rebind<U>::other,而在C++20中将其删除的原因主要是为了简化和统一内存管理的方式。

首先,rebind<U>::other是一个在标准库中定义的用于重新绑定分配器的类型。它的作用是创建一个新的分配器类型,该类型与给定类型不同,但具有相同的分配行为。通过使用rebind<U>::other,可以在编译时生成适应不同类型的分配器。

然而,在实践中,rebind<U>::other的使用并不常见,并且容易导致混淆和错误。它引入了额外的复杂性,并且在代码中很难跟踪和理解。此外,C++17中引入了更简洁和易于使用的分配器编程接口,例如allocatedeallocate成员函数,使得使用rebind<U>::other变得不再必要。

为了提高代码的可读性和维护性,C++20标准决定删除rebind<U>::other。这样可以减少标准库的复杂性,并将注意力集中在更常用和更简单的分配器接口上。

在C++17及以后的版本中,推荐使用std::allocator_traitsstd::allocator来管理内存分配。std::allocator_traits提供了一组标准化的接口,用于操作和查询分配器的属性和行为。而std::allocator是C++标准库中默认的分配器类型,它使用全局operator newoperator delete函数进行内存分配和释放。

总之,C++17不推荐使用rebind<U>::other是为了简化和统一内存管理的方式。C++20中将其删除,进一步推动使用std::allocator_traitsstd::allocator来管理内存分配。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么是线程组,为什么 Java 推荐使用

在线程组,如果发生未捕获异常,可以通过 Thread.UncaughtExceptionHandler 进行处理。 Java ,虽然线程组是一种功能强大的机制,但实际上并不推荐使用。...下面主要从以下几个方面说明: 1、难以扩展 平常的开发,当我们需要对线程进行动态调度时,线程组往往过于笨重,这导致了代码难以扩展。...3、容易引起歧义 Java ,虽然 ThreadGroup 的设计旨在通过将一组线程分到同一个容器来轻松管理和控制它们,但如果使用错误,可能会导致线程状态。...因此, Java ,线程组已基本过时,推荐使用 Executor 框架等新的更实用的工具来进行线程管理。... JDK8之后,API也推出了更加强大的CompletionService接口,它能够执行更为复杂的异步任务并得到结果,这极大地扩展了Java多线程编程的功能性。

29820

Java 为什么推荐 while 循环中使用 sleep()

前言最近逛 CSDN 看到一篇文章,文章大意是说为什么循环中推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...比如微服务体系,客户端上报实例状态,或者服务端检测客户端状态都会使用定时轮询的机制。...事件机制上文的场景,我更推荐事件机制进行解耦,当变量被改变时,发送变量修改事件进行处理,如常见的 Spring Event 或者其它事件推送框架。...比如一些用户登录场景,当用户登录状态改变时,发送登录事件进行后续处理,比如登录通知等等等待和唤醒等待和唤醒机制一般适用于等待时间较长的场景,因为等待和唤醒是一个性能消耗比较大的操作;等待时间不是很长的场景可以使用轮询机制... Java AQS 等待获取锁和线程池任务为空等待新任务时,会使用等待和唤醒操作轮询机制 和 等待和唤醒 一般会结合使用,避免线程频繁的挂起和唤醒。

1.2K30
  • 万字好文:从无栈协程到C++异步框架!

    (五) 小结 前面我们对 C++协程的历史做了简单的铺垫, 接下来我们将对 C++17 基于 Duff Device Hack 的无栈协程实现, 以及 C++20 的无栈协程做更深入的介绍。...(二)为何从 C++17 说起 我们为什么先从 C++17 的无栈协程开始介绍, 这是因为 C++17 的实现与 20 的实现一脉相承....另外, 对于一些不支持 C++20 的受限使用场景, C++17 依然具有它的实用性....协程的使用同时也会带来其他一些好处, 像避免多级 Callback 带来的代码分散逻辑混乱等问题, 这个 C++17 协程使用的范例已经提到过, 此处不再重复....+20 的 Coroutine [2]  推荐阅读 可能是最全的数据仓库全景科普和开发方法论!

    1.1K30

    从无栈协程到C++异步框架

    导语 前面的文章我们尝试从 C++17C++20 的角度分别探讨过其中无栈协程的包装机制和使用, 但其中的设计由来, 原理, 剥析的并不多....C++17基于Duff Device Hack的无栈协程实现, 以及C++20的无栈协程做更深入的介绍. 2....Rpc相关的协程化封装在C++20会有个相关的示例, 此处就不重复展开C++17的实现了. 3...., 比如删除Task的实现, 都要删除Task了, 我们肯定不需要再将Task加入任何可唤醒队列了. 5.3.4 Resume处理 Resume机制主要是通过唤醒Await队列的协程的时候向关联的...协程的使用同时也会带来其他一些好处, 像避免多级Callback带来的代码分散逻辑混乱等问题, 这个C++17协程使用的范例已经提到过, 此处不再重复. 8.

    31421

    从无栈协程到 C++异步框架

    C++17 基于 Duff Device Hack 的无栈协程实现, 以及 C++20 的无栈协程做更深入的介绍. 2....还有比较关键的一点, 可以有效避免过多的异步 Callback 导致的逻辑混乱和难于跟踪调试的问题. 2.2 为何从 C++17 说起 我们为什么先从 C++17 的无栈协程开始介绍, 这是因为 C++...C++17C++20 迁移...., 在有协程调度器存在的情况下, 业务侧对协程的使用感受, 与其他语言如 Python 的差异. 7.1 一个 Python 实现的技能示例 我们以一个原来 python 利用包装的协程调度器实现的技能系统为例...协程的使用同时也会带来其他一些好处, 像避免多级 Callback 带来的代码分散逻辑混乱等问题, 这个 C++17 协程使用的范例已经提到过, 此处不再重复. 8.

    2.5K41

    双端队列和C++ std::deque详解

    双端队列和std::duque 双端队列实际上是队列的一种变形,队列要求只能在队尾添加元素,队头删除元素,而双端队列队头和队尾都可以进行添加和删除元素的操作。...双端队列是限定插入和删除操作表的两端进行的线性表。C++中提供deque容器来实现双端队列的功能。...,通过释放未使用的内存来减少对内存的使用,但其是减少使用内存而更改序列大小的非强制请求,其请求是否达成依赖于具体实现。...Args > iterator emplace( const_iterator pos, Args&&... args ); //C++11 起 其主要作用就是原位构造元素并将其pos前插入到容器...其函数声明如下: void swap( deque& other ); //C++17 前 void swap( deque& other ) noexcept(); //C++17 起 其用法示例如下图所示

    60620

    C++ 动态新闻推送 第5期

    每周更新 周刊项目地址 github,在线地址 discord讨论群组 |飞书讨论群组|知乎专栏 欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue ---- 资讯 编译器信息最新动态推荐关注...代码在这里,效果看这个godbolt连接 image.png Using C++17 to Create Composable, Recursive Data Types 看代码 gist这个脚本嵌入非常优雅...) noexcept : size_(other.size_) { // ... } constexpr Buffer(Buffer&& other) noexcept...accumulate(buf.data(), buf.data()+n, 0); } 缺点是constexpr相关的内存,别的操作不能直接用,只能拷贝 并发吹剑录(二):指令重排序与内存屏障 qsortglibc2.13...主要需求 自由加入退出 webhook通知github仓库消息 我之前调研发现discord支持webhook,所以使用discord,但是国内被屏蔽,登上 现在发现飞书也支持,所以加上了飞书 哪种更通用一些

    1.1K30

    C++异步从理论到实践总览篇

    作者:fangshen,腾讯 IEG 客户端开发工程师 C++20带来了coroutine特性, 同时新的execution也提案过程, 这两者都给我们C++解决异步问题带来了新的思路...., 除网络和IO和日志等少量模块外, 大部分模块主要还是工作主线程上的, 所以当时设计的重点也就放在了c++20 coroutine的包装和使用上, 更多的使用coroutine来完善异步的支持...., c++17/20兼容, 但不推荐使用c++17的版本进行任何尝试, 原因后续文件会展开....这些我们后续分析libunifex具体实现的篇章也能实际感受到. 但深入了解libunifex后, 我们会发现, 它的优点有不少: 尝试为c++提供表达异步的框架性结构....想深入了解的可以直接打开相关的链接观看视频, 很推荐大家去看一下.

    1.4K20

    C++ 动态新闻推送 第26期

    每周更新 周刊项目地址 github,在线地址 discord讨论群组 |飞书讨论群组|知乎专栏 欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue ---- 资讯 编译器信息最新动态推荐关注...,但你可能有隐含依赖 c++17之后,强制要求a b c 这里列一下顺序 a.b a->b a->*b a(b1, b2, b3) // b1, b2, b3 - in any order b @...,之前也参加过cppcon,主要还是大力推广宣传(搞开源,吹没人知道) Designing Concurrent C++ Applications 这个介绍的是c++23即将引入的exexutor抽象...解决方案 //put data member in first base class object //and combine that with ops //other short-hands can...有些新功能,由于保持ABI不能加到c++, c++ 20有个P0192 half float方案,但是iostream可能会因此导致ABI break,方案推迟 计划后面增加支持ABI break的方案

    58820

    c++优先级队列priority_queue使用lambda表达式出错问题

    优先级队列简介 优先级队列priority_queue,可以队列自定义数据的优先级, 让优先级高的排在队列前面优先出队。...image.png 问题描述 c++17下,priority_queue优先级队列使用lambda表达式,可能遇到以下错误提示信息: error: a lambda expression cannot...make_pair("zhen",1)); std::cout << "q.top()=" <<q.top().first <<std::endl; return 0; } 这段代码<em>在</em><em>c</em>...Your code is valid <em>C++20</em> as written but invalid <em>C++17</em> or earlyer....可能你<em>使用</em>了<em>c++20</em>的特性,<em>在</em><em>c++20</em>之前不支持。 <em>在</em> <em>C++20</em> 之前闭包类型不是默认可构造的。<em>在</em> <em>C++20</em> <em>中</em>没有捕获的闭包类型是默认可构造的。

    72620
    领券