You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类const引用成员随新实例创建异常变化的解决方法问询

问题根因

你遇到的变量自行变更问题是悬垂引用导致的:

  • 你的PerspectiveCamera类中center和forward两个成员被声明为const引用类型
  • 你在a_cameras中创建PerspectiveCamera实例时,给这两个参数传入的是临时构造的Point、Vector对象,这类临时对象的生命周期仅持续到构造函数调用结束
  • 构造完成后,类中的两个引用就变成了指向已回收栈内存的悬垂引用,后续创建第二个同类实例时,栈内存被复用,旧实例引用指向的内存值就被覆盖,看起来就像变量自行变更了。
解决方案

不需要修改a_cameras的实现,只要调整PerspectiveCamera类的成员定义,把两个引用类型成员改为值类型即可:

  1. 修改perspective.h中的成员声明:
// 原来的声明
// const Point &center;
// const Vector &forward;
// 修改为:
const Point center;
const Vector forward;
  1. 原有构造函数的实现不需要做任何调整,初始化列表会自动将传入的临时对象拷贝到类自身的成员变量中。

修改后类实例会自行持有center和forward的副本,生命周期和类实例完全绑定,不再依赖外部临时对象,就可以彻底避免变量被意外篡改的问题。

内容的提问来源于stack exchange,提问作者Jane Cherrytree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:54:00