博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深拷贝与浅拷贝
阅读量:4218 次
发布时间:2019-05-26

本文共 3189 字,大约阅读时间需要 10 分钟。

#include 
#include
using namespace std;class HasPtr{public: HasPtr() = default; HasPtr(int value,string * pointer); HasPtr(int); HasPtr(string *); HasPtr(HasPtr &); ~HasPtr(); void output(); int value_; string * pointer_;};HasPtr::HasPtr(int value,string * pointer) :value_(value){ pointer_ = new string(*pointer);}HasPtr::HasPtr(int value):value_(value) { pointer_ = new string;}HasPtr::HasPtr(string *pointer):value_(0) { pointer_ = new string(*pointer);}HasPtr::HasPtr(HasPtr &another_HasPtr) { value_ = another_HasPtr.value_; pointer_ = new string(*another_HasPtr.pointer_);}HasPtr::~HasPtr() { delete pointer_;}voidHasPtr::output() { cout << "value_: " << value_ << ", pointer point to : " << *pointer_ << endl;}voidf(void){ string s1("I was a quick wet boy,diving too deep for coins."); string s2("All of your street light eyes,wide on my plastic toys."); HasPtr ptr1(19,&s1); ptr1.output(); HasPtr ptr2(20); ptr2.output(); HasPtr ptr3(&s2); ptr3.output(); HasPtr ptr4(ptr3); ptr4.output(); s2 = "Then when the cops closed the fair,I cut my long baby hair."; ptr4.output();}intmain() { f(); return 0;}

输出

value_: 19, pointer point to : I was a quick wet boy,diving too deep for coins.

value_: 20, pointer point to : 
value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys.
value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys.
value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys.
 

可见,改变s2之后,并不会影响到ptr4.

对程序做一点修改,使其行为像一个指针

#include 
#include
using namespace std;class HasPtr{public: HasPtr() = default; HasPtr(int value,string * pointer); HasPtr(string *); HasPtr(HasPtr &); ~HasPtr(); void output(); int value_; string *pointer_;};HasPtr::HasPtr(int value,string * pointer) :value_(value),pointer_(pointer){}HasPtr::HasPtr(string *pointer):value_(0),pointer_(pointer){}HasPtr::HasPtr(HasPtr &another_HasPtr) { value_ = another_HasPtr.value_; pointer_ =another_HasPtr.pointer_;}HasPtr::~HasPtr() {}voidHasPtr::output() { cout << "value_: " << value_ << ", pointer point to : " << *pointer_ << endl;}voidf(void){ string s1("I was a quick wet boy,diving too deep for coins."); string s2("All of your street light eyes,wide on my plastic toys."); string * py = &s1; HasPtr ptr1(19,&s1); ptr1.output(); HasPtr ptr3(&s2); ptr3.output(); HasPtr ptr4(ptr3); ptr4.output(); s2 = "Then when the cops closed the fair,I cut my long baby hair."; ptr3.output(); ptr4.output();}intmain() { f(); return 0;}

输出

value_: 19, pointer point to : I was a quick wet boy,diving too deep for coins.

value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys.
value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys.
value_: 0, pointer point to : Then when the cops closed the fair,I cut my long baby hair.
value_: 0, pointer point to : Then when the cops closed the fair,I cut my long baby hair.
可以看出

当s2改变之后,ptr3和ptr4都跟着改变。因为这两个对象内的指针都指向s2

转载地址:http://sqvmi.baihongyu.com/

你可能感兴趣的文章
Android Studio新建类头部注释和添加函数注释模板及快捷键
查看>>
回调函数的小结
查看>>
类成员函数的重载、覆盖和隐藏区别
查看>>
EasyRecovery用法进阶--高阶设置使用技巧
查看>>
用EasyRecovery“监控硬盘”功能检测硬盘问题的方法
查看>>
EasyRecovery---U盘数据恢复技巧
查看>>
EasyRecovery---ppt恢复技巧
查看>>
如何使用EasyRecovery巧妙恢复被误删的办公文档?
查看>>
EasyRecovery,拯救那些遗失的文件
查看>>
EasyRecovery---视频文件恢复技巧
查看>>
剪视频一点都不难,多款超实用剪辑软件全方位评测!
查看>>
简单好用一键恢复丢失办公文档
查看>>
EasyRecovery软件在win10系统中的功能及使用方法介绍(附注册机下载地址)
查看>>
如何用EasyRecovery找回回收站信息(附注册机下载地址)
查看>>
如何用EasyRecovery找回删除的文档(附注册机下载地址)
查看>>
EasyRecovery——一款专业的数据恢复软件
查看>>
除了数据恢复,EasyRecovery还有这样的功能!
查看>>
2021-06-30
查看>>
如何用EasyRecovery找回已经删除的图片?
查看>>
想要做音乐玩音乐,有这一个软件就够了!
查看>>