【发布时间】:2020-10-05 08:03:37
【问题描述】:
我正在构建一个类似表达式的类系统。我想利用临时变量的生命周期规则来避免将确保表达式存储在一个带有不可读错误消息的巨大丑陋模板类中。
当然,如果用户巧妙地将我的一个表达式对象保存在一个变量中,他们可能会意外地创建悬空临时对象。
有没有办法阻止用户创建一个局部变量来保存我的一个表达式实例,这样他们就永远不会对他们认为已捕获但实际上只是暂时的临时变量感到惊讶?
【问题讨论】:
-
我很确定我已经在 SO 上看到了这个问题的重复项,但我现在找不到。 IIRC,您可以使存储它变得更加困难,但如果该人足够坚定,则并非不可能。
-
我看到一个库通过拆分变量和树表达式来解决该问题:因此,您构建了存储占位符和常量(以及子表达式)的表达式模板,然后仅在末尾应用表达式。跨度>
-
pre-c++17,您可能拥有所有构造函数私有(复制/移动可以删除)并使用
return {..};创建工厂方法,但保证 C++17 的复制省略打破它。
标签: c++ temporary-objects