C++26 是否会得到破坏性的移动语义?

Nov 21, 2025     Author:signa11     HN Points:28     HN Comments:4
Share this

摘要: 文章讨论了在C++中如何表达一个消耗对象的函数,即不执行移动后的对象的析构函数。作者提出了一个名为trivially_relocate_at的库函数,该函数可以在不调用析构函数的情况下在两个指针之间转移对象的所有权。作者认为这个函数的签名没有明确表明它实际上销毁了一个对象在src或者相反地,在dst处构造了一个对象。作者怀疑这种功能是通过使用placement-new和std::destroy_at来避免手动内存管理的。作者还提出了一种新的指针限定符的概念,以表达所有权的给予和夺取,并建议通过这种方式来实现静态生命周期分析。

讨论: 该内容主要讨论了C++编程语言在开发中的复杂性和一些语言特性的实现问题。一位用户CosmicZombie表示,学习Rust后,发现C++的复杂性是不必要的,认为其类似于用地球为中心的太阳系模型来解释行星运动,而太阳为中心的模型更为简单。另一位用户staplung提到了C++26中一个重要特性的移除,因为无法在规定时间内修复。amluto讨论了C++中破坏性移动(destructive move)的概念,并与其他语言如Go和Python进行了比较,指出Go在处理错误和变量有效性方面采取了不同的策略。最后,andrewmcwatters对某位评论者的语法表示赞赏。

原文标题:Is C++26 getting destructive move semantics?
原文链接:https://stackoverflow.com/questions/79817124/is-c26-getting-destructive-move-semantics
讨论链接:https://news.ycombinator.com/item?id=46005130