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

无堆与指针场景下C++对象赋值操作属于浅拷贝还是深拷贝咨询

问题对应的代码段

class A{
  public:
     int val;
     a(); 
};
int main(){
     A obj1;
     A obj2=obj1;
}

结论

你示例中的A obj2=obj1执行的是浅拷贝,但当前场景下浅拷贝和深拷贝的运行效果没有任何差异。

详细解释

  • 首先要明确:深浅拷贝的差异只在类包含指向堆内存的指针成员时才会体现:
    • 浅拷贝仅逐位复制对象的所有成员值,如果有指针成员,两个对象的指针会指向同一块堆内存,销毁时容易出现double free、野指针等问题
    • 深拷贝会额外申请独立的堆内存,把原指针指向的内容完整复制到新内存中,两个对象的指针指向不同内存,互不干扰
  • 你提供的类A仅包含int类型的成员,没有指针也没有堆内存占用,编译器默认生成的拷贝构造函数只会把obj1.val的值直接复制给obj2.val,本身就是浅拷贝行为,也不会产生任何运行问题。

关于你提到的地址不同的问题

obj1和obj2是栈上两个完全独立的对象,本身就占用两块不同的内存空间,用addressof()拿到的对象本身的地址当然不一样,这个和深浅拷贝没有任何关联。深浅拷贝判断的从来都不是对象自身的地址,而是对象内部的指针成员指向的堆内存地址是否相同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:03:01