文档章节

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

她吃西红柿
 她吃西红柿
发布于 2017/07/24 11:54
字数 243
阅读 22
收藏 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拷贝进去

© 著作权归作者所有

共有 人打赏支持
她吃西红柿
粉丝 32
博文 44
码字总数 21703
作品 0
杭州
iOS工程师
C++雾中风景6:拷贝构造函数与赋值函数

在进行C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数。初涉类编写的代码,对于两类函数的用法一直是挺让人困惑的内容。这篇文章我们会详细来梳理拷贝构造函数与赋值函数...

LeeHappen
01/17
0
0
MutableCopy & copy

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

AmoyAI
2012/12/11
0
0
【c++语法系列】【一】const详解

1.普通const变量初始化 3.const变量做函数参数 总结一:const常量与非const常量之间可以随意传输,但是const引用不行。只能非const引用传给const引用,不能const引用传递给非const引用。 一句...

muqiusangyang
05/08
0
0
C++构造函数详解及显式调用构造函数

C++构造函数详解及显式调用构造函数 参考地址:http://ticktick.blog.51cto.com/823160/194307 下面讨论一个重要问题是:构造函数的显式调用 --------------------------------------------...

IMGTN
2012/11/14
0
0
7-C++远征之封装篇[下]-学习笔记

C++远征之封装篇(下) c++封装概述 下半篇依然围绕类 & 对象进行展开 将原本学过的简单元素融合成复杂的新知识点。 对象 + 数据成员 = 对象成员(对象作为数据成员) 对象 + 数组 = 对象数组(...

天涯明月笙
07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部