91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中的默認函數 深拷貝與淺拷貝 深賦值與淺賦值

發布時間:2020-08-04 13:23:23 來源:網絡 閱讀:596 作者:匯天下豪杰 欄目:編程語言

1、C++中什么都不寫,就有6個默認函數,由系統自動提供:

  構造函數,拷貝構造函數,賦值語句,析構函數,對一般對象的取地址符,對常對象的取地址重載;

對&運算符的重載:

  Test t3;

  Test *pt = &t3;

Test* operator&(){
    return this;
}

對常對象的取地址重載;

const Test t4;

const Test *pt1 = &t4;

const Test* operator&()const{
    return this;
}

2、深拷貝與淺拷貝

#include<iostream>
#include<string.h>
#include<malloc.h>
using namespace std;

class String{
public:
    String(const char *str = ""){
        if(str == NULL){
            data = new char;
            data[0] = 0;
        }else{
            data = new char[strlen(str) + 1];
            strcpy(data, str);
        }
    }
    ~String(){
        delete []data;
    }
private:
    char *data;
};

int main(void){
    String t1("abcdef");
    String t2 = t1;
    String t3("hello");
    t3 = t1;

    return 0;
}

運行結構如下:

C++中的默認函數 深拷貝與淺拷貝 深賦值與淺賦值

可以知道,程序崩了,我們用的是系統默認的拷貝構造函數和賦值語句,此時只是各成員之間的賦值,

C++中的默認函數 深拷貝與淺拷貝 深賦值與淺賦值

  兩個對象通過默認的拷貝構造,成員data之間相互賦值,使得data不同,data的值相同,指向了同一空間;

  此時在最后調用析構函數時,形成了對同一空間的多次釋放,是錯誤操作!!!,這就是淺拷貝。

  兩個對象通過默認的賦值語句,成員data之間相互賦值,使得data不同,data的值相同,指向了同一空間,淺賦值。

解決方案,此時應給自己寫拷貝構造和賦值語句,達成深拷貝:

String(const String &s){
    data = new char[strlen(s.data) + 1];
    strcpy(data, s.data);
}
String& operator=(const String &s){
    if(this != &s){
        delete []data;
        data = new char[strlen(s.data) + 1];
        strcpy(data, s.data);
    }

    return *this;
}

  深拷貝和深賦值的意思:就是重新申請空間,各自保存自己的,最后在自己釋放自己的,保證了對內存訪問的安全性;

  深賦值應當注意以下四步:

  (1)、判斷自己是否給自己賦值

  (2)釋放原有空間      //有可能在構造對象時,已經指向了某一空間,此時就得先釋放,不然就內存泄漏

  (3)、申請空間進行賦值

  (4)、返回引用空間



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊吾县| 辽阳市| 勃利县| 呈贡县| 通海县| 布拖县| 荔浦县| 河南省| 中卫市| 松江区| 裕民县| 龙门县| 天祝| 东方市| 始兴县| 白银市| 兰考县| 梅州市| 绥宁县| 五台县| 漠河县| 乳山市| 岳阳县| 蓬莱市| 通海县| 阳春市| 浙江省| 拜泉县| 博野县| 西吉县| 县级市| 林州市| 普洱| 普定县| 灯塔市| 九寨沟县| 嵩明县| 怀宁县| 车险| 山东省| 聂拉木县|