文档章节

C/C++拾遗(三)浅拷贝和深拷贝

她吃西红柿
 她吃西红柿
发布于 2017/07/24 11:54
字数 243
阅读 33
收藏 0

在iOS开发中也会涉及到浅拷贝和深拷贝,简而言之:

  • 浅拷贝:拷贝指针变量的值
  • 深拷贝:拷贝指针所指向内存空间

不过这次我们通过C语言来实现:

//声明一个结构体
typedef struct Person {
    char name[20];
    int age;
    char *alias;
}Person;

//拷贝方法
void copyPerson(Person *from, Person *to){
    
    *to = *from;
}
//main函数
int main(int argc, const char * argv[]) {
    
    Person p1;
    p1.age  = 11;
    strcpy(p1.name, "royce");
    p1.alias = "owen";
    Person p2;
    
    copyPerson(&p1, &p2);
    
    printf("p2:%p p1:%p\np2-alias:%p p1-alias:%p\n",&p2,&p1,p2.alias,p1.alias);

    return 0;
}
//打印
p2-alias:0x100000f80 p1-alias:0x100000f80

我们发现p1的alias和p2的alias指向了同一块内存空间,编译器=号赋值默认浅拷贝

实现深拷贝

void copyPerson(Person *from, Person *to){
    
    *to = *from;
    to->alias = (char *)malloc(100);
    strcpy(to->alias, from->alias);

}
//打印
p2-alias:0x1003069a0 p1-alias:0x100000f82

我们给p2的alias重写分配了内存,然后将p1的alias拷贝进去

© 著作权归作者所有

共有 人打赏支持
她吃西红柿
粉丝 36
博文 52
码字总数 25812
作品 0
杭州
iOS工程师
私信 提问
设计模式之原型模式学习

由于没有接触过C#,不知《大话设计模式》所云。但无看了《大话设计模式》觉得非就是深拷贝和浅拷贝的问题。在此谈谈我对C++深拷贝与浅拷贝的认识,不足之处请指出。 对编程来说简单的复制粘贴...

长平狐
2012/10/08
28
0
最好的朋友:C++11 移动语义和 Pimpl 手法

当编译器可以用廉价的挪动操作替换昂贵的复制操作时,也就是当它可以用一个指向一个大对象的指针的浅层复制来替换对这个大对象的深层复制的时候,挪动语义要比复制语义更快速。因此,在类中利...

乌合之众
2016/06/08
3K
5
MutableCopy & copy

分别遵守<NSCopying>和 <NSMutableCopying>协议,http://blog.csdn.net/tskyfree/article/details/7999620 首先了解深复制,浅复制: 浅复制和深复制是对于包含对象成员的对象而言的。 浅复制:...

AmoyAI
2012/12/11
0
0
C++ 对象资源管理惯用法

原文:C++ 对象资源管理惯用法 作者:Breaker 关于 C++ 对象资源管理的惯用法,note-to-self + keynote + idiom case + cross-reference 式笔记 keyword: RAII, deleter, Two-stage Initiali...

晨曦之光
2012/05/23
147
0
c++构造函数

c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子...

晨曦之光
2012/05/16
118
0

没有更多内容

加载失败,请刷新页面

加载更多

开源软件会被云杀死吗 ?

本文转载云头条,原作者:Michael Stiefel是Reliable Software公司的负责人,是一名软件架构和开发顾问。 文章要点 虽然开源开发不会消失,但商业开源厂商的未来不是很有希望。随着全面管理的...

linuxCool
43分钟前
4
0
OSChina 周三乱弹 —— 谈什么对象?睡什么觉?

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @胖达panda :最肯忘却古人诗,最不屑一顾是相思。分享童丽的单曲《红豆生南国》: 《红豆生南国》- 童丽 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
47分钟前
237
5
stylus

stylus基础教程,stylus实例教程,stylus语法总结

miaojiangmin
今天
5
0
PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部