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

C++构造器中数组指针赋值有效性及拷贝机制的技术问询

问题解答

第一个问题:构造器代码输出true不是侥幸

你这段代码里,arr是main函数里的局部变量,它的生命周期和vec完全重叠——只要main函数没执行完,arr占用的内存就不会被释放。所以vec.data_ptr指向的arr的地址是有效的,访问vec.data_ptr[0]自然能拿到正确的值,和arr[0]相等是必然的,不是侥幸。

但要注意,这种写法隐患极大:如果把arr放到其他函数里(比如一个创建数组并返回Vector3d的函数),当那个函数执行完毕,局部数组的内存会被回收,此时vec.data_ptr就变成了悬空指针,再访问就会触发未定义行为(可能崩溃、输出错误值等)。你之前了解的“返回方法内数组的指针会失效”,指的就是这种局部数组生命周期结束的场景。

第二个问题:数组成员的拷贝构造是独立值,内存地址不同

当你把成员变量改成float data_ptr[3]时,这个数组是Vector3d对象的一部分,拥有独立的内存空间。构造器里的循环把values数组的每个元素值复制到data_ptr对应的位置,所以:

  • data_ptr[i]和values[i]是存储在不同内存地址的独立值
  • 修改其中一个不会影响另一个(比如修改arr[0],vec.data_ptr[0]不会跟着变)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:33:17