[C++] Deep copy ,Shallow copy, copy constructor,"="

Deep copy ,Shallow copy, copy constructor,"="

Dog.h

#pragma once
class Dog
{
public:
    char *name;
    Dog();
    Dog(const Dog &it);
    ~Dog();
    void operator =(const Dog &it);
};

Dog.cpp

#include "Dog.h"
#include<string.h>
#include<iostream>

using namespace std;

//Constructor
Dog::Dog()
{
    name = new char[20];
    memset(name,0,sizeof(name));
    strcpy(name,"xiaohuang");
    cout << "dog" << endl;
}
//Destructor
Dog::~Dog()
{
    delete []name;
    cout << "~dog" << endl;
}
// copy constructor
Dog::Dog(const Dog &it)
{
    name = new char[20];
    memset(name, 0, sizeof(name));
    strcpy(name, it.name);
    cout << "copy dog" << endl;
}
// overload =
void Dog:: operator =(const Dog &it)
{
    strcpy(name, it.name);
    cout << " = " << endl;
}

main.cpp

#include"Dog.h""
using namespace std;

void test(){
    Dog d1;
    Dog d2 = d1;
    Dog d3;
    d3 = d1;
}
void main(){

    test();
    system("pause");
}

时间: 2024-10-08 05:49:03

[C++] Deep copy ,Shallow copy, copy constructor,"="的相关文章

Summary: Deep Copy vs. Shallow Copy vs. Lazy Copy

Object copy An object copy is an action in computing where a data object has its attributes copied to another object of the same data type. An object is a composite data type in object-oriented programming languages. The copying of data is one of the

猫猫整理问题之:copy,对象自定义copy

猫猫分享,必须精品 原文地址:http://blog.csdn.net/u013357243?viewmode=contents copy copy的正目的 copy 目的:建立一个副本,彼此修改,各不干扰 Copy(不可变)和MutableCopy(可变)针对Foundation框架的数据类型. 对于自定义类,copy就是可变的. 可变数组的copy 这里用NSMutableArray为例子. // 可变=>可变&不可变,内存地址都会变化 void copyDemo1() { NSMuta

理解一下python中的浅copy和深copy

最近在学习过程中,了解了一下,浅copy和深copy,做个记录. 所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变对象(str.tuple)需要开辟新的空间 修改可变对象(list等)不需要开辟新的空间 浅拷贝仅仅复制了容器中元素的地址 >>> user = ['tom', ['age', 20]] >>> user_new = us

copy构造与copy复制

“copy构造”与“copy复制”误区:----“=”语法也可以用来调用copy构造函数: 如:Constr object3 = object1; 区别在于:如果定义一个新的对象(如Constr object3),一定会有个构造函数被调用,不可能调用复制操作. 如果没有新对象被定义(如object1 = object2;),不会有构造函数被调用,你们当然是“copy复制”操作被调用! 示例代码: #include<iostream>#include<vector>#include&

python中的深copy和浅copy

bytes Python bytes/str bytes 在Python3中作为一种单独的数据类型,不能拼接,不能拼接,不能拼接 >>> '€20'.encode('utf-8') b'\xe2\x82\xac20' >>> b'\xe2\x82\xac20'.decode('utf-8') '€20' 解码 >>> b'\xa420'.decode('windows-1255') '?20' 深copy和浅copy 深copy新建一个对象重新分配内存

(五)聊一聊深Copy与浅Copy

一.关于浅copy与深copy 首先说明一下: 在python中,赋值其实就是对象的引用,变量就是对象的一个标签,如果把内存对象比喻成一个个房间,那么变量就是门牌号. 深copy与浅copy只是针对可变类型而言,对于不可变类型,无论深浅,值相等,内存地址一样,一旦值发生变化,相当于再创建一个对象. 浅copy有3种方法: a=[1,2,3,["a","b"],22] a1=a[:]  切片操作 a2=list(a)  工厂函数 a3=copy.copy(a)  或

C++类禁止copy构造函数和copy assign操作符

C++类禁止copy构造函数和copy assign操作符 在C++类中,编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数.注意,这些编译器产生出来的函数都是public的,为了阻止这些函数被创建出来,我们可以把它们声明为private,这样就阻止了编译器暗自创建其对应版本函数. class Node { public: Node(int _data = 0) : data(_data) {} int get() cons

浅copy与深copy举例

 例1: 1 #!/usr/bin/env python 2 import copy 3 d1 = {'x':1,'y':2,'z':[3,4.5]} 4 d2 = d1 5 d3 = d1.copy() 6 d4 = copy.copy(d1) 7 d5 = copy.deepcopy(d1) 8 d1['x'] = 'm' 9 d1['z'][0] = 9 10 print(d1) 11 print(d2) 12 print(d3) 13 print(d4) 14 print(d5)   输

浅copy与深copy

浅copy 实现浅copy的几种方式: 1 import copy 2 3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng'] 4 5 name2=copy.copy(name1) 6 name2=name1[:] 7 name2=name1.copy() 实现深copy的方式: 1 import copy 2 3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng'] 4 5 name2=copy.deep