亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中淺拷貝與深拷貝的詳解及其作用介紹

 更新時(shí)間:2021年09月07日 11:08:05   作者:我是小白呀  
這篇文章主要介紹了C++中淺拷貝與深拷貝的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

概述

淺拷貝 (shallow copy) 只是對(duì)指針的拷貝, 拷貝夠兩個(gè)指針指向同一個(gè)內(nèi)存空間. 深拷貝 (deep copy) 不但對(duì)指針進(jìn)行拷貝, 而且對(duì)指針指向的內(nèi)容進(jìn)行拷貝. 經(jīng)過深拷貝后的指針是指向兩個(gè)不同地址的指針.

在這里插入圖片描述

對(duì)象的賦值

同類對(duì)象之間可以相互賦值. 對(duì)象賦值的一般形式:

對(duì)象名1 = 對(duì)象名2;

舉個(gè)栗子:

int main() {

    Time t1(6,6,6);
    Time t2 = t1; // 對(duì)象賦值
    
    return 0;
}

實(shí)現(xiàn)原理: 賦值運(yùn)算符的重載.

對(duì)象的復(fù)制

對(duì)象的復(fù)制即用已有的對(duì)象克隆出一個(gè)新對(duì)象. 對(duì)象復(fù)制的一般格式:

類名 對(duì)象2(對(duì)象1);

舉個(gè)栗子:

int main() {

    Time t1(8, 8, 8);
    Time t2(t1);  // 對(duì)象的復(fù)制
    
    return 0;
}
int main() {

    Time t1(8, 8, 8);
    Time t2 = t1;  // 對(duì)象的復(fù)制
    
    return 0;
}

原理: 編譯系統(tǒng)默認(rèn)提供的默認(rèn)復(fù)制構(gòu)造函數(shù). 如:

Time::Time(const Time& t){
    hour = t.hour;
    minute = t.minute;
    second = t.second;
}

對(duì)象復(fù)制的用途

建立一個(gè)新對(duì)象

我們可以利用復(fù)制構(gòu)造函數(shù)進(jìn)行初始化而建立一個(gè)新對(duì)象.

Time t2(t1);

函數(shù)的參數(shù)為類對(duì)象

通過調(diào)用復(fù)制的構(gòu)造函數(shù)來建立一個(gè)實(shí)參的拷貝, 在調(diào)用函數(shù)時(shí)我們可以將實(shí)參對(duì)象完整的傳遞給形參. 例如:

void fun(Time time);

using namespace std;

int main() {

    Time t1(8, 8, 8);
    fun(t1);

    return 0;
}

void fun(Time time) {
    cout << "function" << endl;
}

函數(shù)的返回值為類對(duì)象

當(dāng)函數(shù)調(diào)用完畢, 我們需要通過調(diào)用復(fù)制的構(gòu)造函數(shù)將函數(shù)中的對(duì)象復(fù)制一個(gè)臨時(shí)的對(duì)象并返回. 例如:

Time fun();

using namespace std;

int main() {

    Time t2;
    t2 = fun();

    return 0;
}

Time fun() {
    Time t1(8, 8,8);
    return t1;
}

淺拷貝

淺拷貝 (Shallow Copy) 只復(fù)制某個(gè)對(duì)象的指針, 而不復(fù)制對(duì)象本身, 新舊對(duì)象還是共享同一塊內(nèi)存.

在這里插入圖片描述

Test 類:

#ifndef PROJECT2_TEST_H
#define PROJECT2_TEST_H

class Test {
public:
    int x;
    Test(int n);
    void show();
};

#endif //PROJECT2_TEST_H

Test.cpp:

#include <iostream>
#include "Test.h"
using namespace std;

Test::Test(int n) : x(n){}

void Test::show() {
    cout << x << endl;
}

main:

#include "Test.h"
#include <iostream>

using namespace std;

int main() {

    Test *pt1 = new Test(100);
    Test *pt2 = pt1;

    pt1 -> x = 5;

    pt1 -> show();
    pt2 -> show();
	
	delete pt1;
	delete pt2;
	
    return 0;
}

輸出結(jié)果:

5
5

深拷貝

深拷貝 (Deep Copy) 在拷貝的過程中會(huì)另外創(chuàng)造一個(gè)一模一樣的對(duì)象. 新對(duì)象跟原對(duì)象不共享內(nèi)存, 修改新對(duì)象不會(huì)改到原對(duì)象. 例如:

#include "Test.h"
#include <iostream>

using namespace std;


int main() {

    Test a(100);
    Test b = a;

    a.x = 5;
    a.show();
    b.show();

    return 0;
}

輸出結(jié)果:

5
100

到此這篇關(guān)于C++中淺拷貝與深拷貝的詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++淺拷貝深拷貝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++?ROS與boost:bind()使用詳解

    C++?ROS與boost:bind()使用詳解

    boost::bind是標(biāo)準(zhǔn)庫(kù)函數(shù)std::bind1st和std::bind2nd的一種泛化形式,其可以支持函數(shù)對(duì)象、函數(shù)、函數(shù)指針、成員函數(shù)指針,并且綁定任意參數(shù)到某個(gè)指定值上或者將輸入?yún)?shù)傳入任意位置,本文重點(diǎn)介紹下C++?ROS與boost:bind(),感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • C語言實(shí)現(xiàn)貪吃蛇小游戲

    C語言實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++list的模擬實(shí)現(xiàn)

    C++list的模擬實(shí)現(xiàn)

    list是數(shù)據(jù)結(jié)構(gòu)中的鏈表,在C++的STL中,有l(wèi)ist的模板,STL中的list的結(jié)構(gòu)是帶頭雙向循環(huán)鏈表,當(dāng)然STL中還有一個(gè)forward_list的鏈表,這個(gè)鏈表是一個(gè)帶頭的單鏈表。為了更好的理解list,我們來對(duì)其進(jìn)行模擬實(shí)現(xiàn)。,需要的朋友可以參考
    2023-04-04
  • QT如何通過鼠標(biāo)事件實(shí)現(xiàn)圖片的拖動(dòng)和縮放

    QT如何通過鼠標(biāo)事件實(shí)現(xiàn)圖片的拖動(dòng)和縮放

    本文介紹了如何通過鼠標(biāo)拖動(dòng)移動(dòng)圖片以及使用鼠標(biāo)滾輪進(jìn)行圖片縮放的技術(shù)實(shí)現(xiàn),包括完整的解決方案,ImageWidget.h、ImageWidget.cpp和main.cpp的編寫,以及詳細(xì)的函數(shù)解釋,如paintEvent()重繪圖片,以及平滑縮放和偏移量的應(yīng)用等,需要的朋友可以參考下
    2024-10-10
  • MFC列表控件CListCtrl使用方法示范

    MFC列表控件CListCtrl使用方法示范

    這篇文章主要介紹了MFC列表控件CListCtrl使用方法示范,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • C++設(shè)計(jì)模式之觀察者模式(Observer)

    C++設(shè)計(jì)模式之觀察者模式(Observer)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之觀察者模式Observer,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C語言中遞歸和排列組合詳解

    C語言中遞歸和排列組合詳解

    大家好,本篇文章主要講的是C語言中遞歸和排列組合詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 擴(kuò)展KMP算法(Extend KMP)

    擴(kuò)展KMP算法(Extend KMP)

    我們這里說的KMP不是拿來放電影的(雖然我很喜歡這個(gè)軟件),而是一種算法。KMP算法是拿來處理字符串匹配的。今天我們談到的是對(duì)KMP算法的拓展
    2014-08-08
  • OpenCV圖像輪廓提取的實(shí)現(xiàn)

    OpenCV圖像輪廓提取的實(shí)現(xiàn)

    本文主要介紹了OpenCV圖像輪廓提取的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++IO流之fstream,?stringstream使用小結(jié)

    C++IO流之fstream,?stringstream使用小結(jié)

    C語言中常用的輸入輸出函數(shù)有如下幾種:前者是格式化標(biāo)準(zhǔn)輸入輸出,后者是格式化文件輸入輸出,最后是格式化字符串輸入輸出,這篇文章主要介紹了C++IO流:fstream,?stringstream總結(jié),需要的朋友可以參考下
    2022-04-04

最新評(píng)論