【笔试题】深拷贝与浅拷贝(二)
来源:互联网 发布:盐城龙卷风 知乎 编辑:程序博客网 时间:2024/06/02 06:48
刚看到一道同类型的,一起搬上来了。。。
#include <iostream> class A { int i; }; class B { A *p; public: B() { p = new A; } ~B() { delete p; } }; void sayHello(B b) { } int main() { B b; sayHello(b); return 0; }
题中的代码如上,问题是上面的代码是否存在问题?
这题考到了两个知识点,一个是函数调用的值传递过程(函数中的参数是实际参数的一份拷贝),另一个就是关于深、浅拷贝。
函数形参传递了类对象b, 浅拷贝一个临时对象,在将一个对象赋值给另一个对象时,对象的数据成员间值将进行简单的拷贝,而其中的指针也将进行拷贝,这时候两个指针不同,但指向的对象相同,所以当函数执行结束,对临时对象析构的时候,指针指向的对象将被delete,而程序执行完毕之后,又会对b进行析构,这时再次delete,于是引发错误。
改错:
">#include <iostream> class A { int i; }; class B { A *p; public: B() { p = new A; } B(const B& copy){ if(copy.p) { p = new A; memcpy(p, copy.p, sizeof(A)); } ~B() { delete p; } }; void sayHello(B b) { } int main() { B b; sayHello(b); return 0; }
阅读全文
0 0
- 【笔试题】深拷贝与浅拷贝(二)
- 【笔试题】深拷贝与浅拷贝(一)
- 内存学习(二)深拷贝,浅拷贝,完全拷贝
- 深拷贝与浅拷贝(转)
- 深拷贝与浅拷贝(Java)
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- MySQL中explain命令的type指标讲解
- 实现歌词滚动
- angularjs DIV滚动条置底
- Android探索之旅(第二十八篇)BaseActivity,BaseFragment封装必要点
- 查资料:Windows核心编程(第5版中文版) 编译不通过的处理
- 【笔试题】深拷贝与浅拷贝(二)
- java注册时向指定邮箱发送邮件激活
- 1.4 eclipse 第一个java程序 Hello World
- 分布式事务、基于Best Efforts 1PC模式的事务
- i2c协议理解
- filebeat接入数据kafka
- View和ViewGroup
- unexcepted token 错误和XXX is not a function错误的解决办法
- 如何实施代码重构