国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++深拷貝與淺拷貝

這篇具有很好參考價(jià)值的文章主要介紹了C++深拷貝與淺拷貝。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

淺拷貝的問題

默認(rèn)提供的拷貝構(gòu)造就是淺拷貝,如果拷貝的對(duì)象中含有成員指針變量指向堆區(qū)中的內(nèi)存空間,那么就會(huì)出現(xiàn)兩個(gè)對(duì)象中的成員指針變量指向同一塊堆區(qū)空間,當(dāng)方法執(zhí)行結(jié)束后,對(duì)象就會(huì)被釋放,調(diào)用析構(gòu)函數(shù)(析構(gòu)函數(shù)中存在釋放在堆區(qū)開辟的內(nèi)存空間),就會(huì)存在一塊內(nèi)存空間被多次釋放的問題。

解決辦法

自己寫拷貝構(gòu)造,讓拷貝構(gòu)造后的對(duì)象中的成員指針變量指向一塊新的內(nèi)存空間。
C++深拷貝與淺拷貝
C++深拷貝與淺拷貝文章來源地址http://www.zghlxwxcb.cn/news/detail-425058.html

//
// Created by Administrator on 2023/4/25.
//
#include <iostream>
using namespace std;
// 深拷貝和淺拷貝
class Person {
public:
    int p_age;
    int *p_weight;

    Person() {
        cout << "無參構(gòu)造" << endl;
    }

    Person(int age, int height) {
        p_age = age;
        p_weight = new int(height);
        cout << "有參構(gòu)造" << endl;
    }

    // 析構(gòu)函數(shù) 用于釋放手動(dòng)在堆區(qū)開辟的空間
    ~Person() {
        if (p_weight != NULL) {
            delete p_weight;
            // 防止野指針
            p_weight = NULL;
        }
        cout << "析構(gòu)函數(shù)" << endl;
    }

    // 拷貝構(gòu)造 不寫讓編譯器生成
    // 防止 淺拷貝帶來的問題 自己寫拷貝構(gòu)造 避免這個(gè)問題
    Person(const Person &p) {
        cout << "自己寫的拷貝構(gòu)造,避免淺拷貝的問題" << endl;
        p_age = p.p_age;
        // 這是淺拷貝
        // p_height = p.p_height; 自動(dòng)生成的就是這樣

        // 深拷貝 重新開一塊空間 防止出現(xiàn)重復(fù)釋放的問題
        p_weight = new int(*p.p_weight);
    }
};

void test() {
    Person p1(10, 120);
    cout << "年齡為: " << p1.p_age << ", 體重為: " << *p1.p_weight << endl;
    Person p2(p1);
    cout << "年齡為: " << p2.p_age << ", 體重為: " << *p2.p_weight << endl;
    // 會(huì) 先釋放p2 在釋放p1
    // 釋放p2后析構(gòu)函數(shù)會(huì)將 堆區(qū)中開辟的空間釋放了 p1在此執(zhí)行析構(gòu) 在此操作那塊內(nèi)存就會(huì)報(bào)錯(cuò)
}

int main() {
    test();
    return 0;
}

到了這里,關(guān)于C++深拷貝與淺拷貝的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】類和對(duì)象③(類的默認(rèn)成員函數(shù):拷貝構(gòu)造函數(shù) | 賦值運(yùn)算符重載)

    【C++】類和對(duì)象③(類的默認(rèn)成員函數(shù):拷貝構(gòu)造函數(shù) | 賦值運(yùn)算符重載)

    ?? 個(gè)人主頁: Forcible Bug Maker ?? 專欄: C++ 目錄 前言 拷貝構(gòu)造函數(shù) 概念 拷貝構(gòu)造函數(shù)的特性及用法 賦值運(yùn)算符重載 運(yùn)算符重載 賦值運(yùn)算符重載 結(jié)語 本篇主要內(nèi)容:類的6個(gè)默認(rèn)成員函數(shù)中的 拷貝構(gòu)造函數(shù) 和 賦值運(yùn)算符重載 在上篇文章中我們講到了類的默認(rèn)成員函數(shù)的

    2024年04月17日
    瀏覽(29)
  • 【C++初階】類與對(duì)象:6大默認(rèn)成員函數(shù)------拷貝構(gòu)造和賦值運(yùn)算符重載

    【C++初階】類與對(duì)象:6大默認(rèn)成員函數(shù)------拷貝構(gòu)造和賦值運(yùn)算符重載

    ? 拷貝構(gòu)造函數(shù): 只有單個(gè)形參,該形參是對(duì)本類類型對(duì)象的引用(一般常用const修飾) ,在用已存在的類類型對(duì)象創(chuàng)建新對(duì)象時(shí)由編譯器自動(dòng)調(diào)用。 1. 拷貝構(gòu)造函數(shù)是 構(gòu)造函數(shù)的一個(gè)重載形式 ; 2. 拷貝構(gòu)造函數(shù)的 參數(shù)只有一個(gè)且必須是類類型對(duì)象的引用 ,使用傳值方式編

    2024年02月03日
    瀏覽(26)
  • C++深拷貝與淺拷貝

    C++深拷貝與淺拷貝

    默認(rèn)提供的拷貝構(gòu)造就是淺拷貝,如果拷貝的對(duì)象中含有成員指針變量指向堆區(qū)中的內(nèi)存空間,那么就會(huì)出現(xiàn)兩個(gè)對(duì)象中的成員指針變量指向同一塊堆區(qū)空間,當(dāng)方法執(zhí)行結(jié)束后,對(duì)象就會(huì)被釋放,調(diào)用析構(gòu)函數(shù)(析構(gòu)函數(shù)中存在釋放在堆區(qū)開辟的內(nèi)存空間),就會(huì)存在一塊內(nèi)

    2023年04月25日
    瀏覽(23)
  • C++:構(gòu)造方法(函數(shù));拷貝(復(fù)制)構(gòu)造函數(shù):淺拷貝、深拷貝;析構(gòu)函數(shù)。

    C++:構(gòu)造方法(函數(shù));拷貝(復(fù)制)構(gòu)造函數(shù):淺拷貝、深拷貝;析構(gòu)函數(shù)。

    1.構(gòu)造方法(函數(shù)) 構(gòu)造方法是一種特殊的成員方法,與其他成員方法不同: 構(gòu)造方法的名字必須與類名相同; 無類型、可有參數(shù)、可重載 會(huì)自動(dòng)生成,可自定義 一般形式:類名(形參); 例: Stu(int age); 當(dāng)用戶沒自定義構(gòu)造方法時(shí),系統(tǒng)將會(huì)執(zhí)行默認(rèn)構(gòu)造方法,當(dāng)用戶自定義一個(gè)

    2024年02月11日
    瀏覽(20)
  • C++——拷貝構(gòu)造函數(shù)

    (用舊對(duì)象去構(gòu)造新對(duì)象) 拷貝構(gòu)造函數(shù),又稱復(fù)制構(gòu)造函數(shù),是一種特殊的構(gòu)造函數(shù),它由編譯器調(diào)用來完成一些基于同一類的其他對(duì)象的構(gòu)造及初始化。 參數(shù)的類型: ? 值類型(不行,會(huì)產(chǎn)生遞歸); 指針類型(能實(shí)現(xiàn)要求,但會(huì)出現(xiàn)歧義(感覺a的地址給b構(gòu)造));

    2024年02月02日
    瀏覽(20)
  • 【C++】詳解拷貝構(gòu)造

    【C++】詳解拷貝構(gòu)造

    拷貝構(gòu)造的功能 寫法: 拷貝構(gòu)造函數(shù)的參數(shù)為什么是引用類型 系統(tǒng)自動(dòng)生成的拷貝構(gòu)造函數(shù) 拷貝構(gòu)造的深拷貝與淺拷貝 概念 淺拷貝: 深拷貝 小結(jié) 拷貝構(gòu)造函數(shù) 可以把曾經(jīng) 實(shí)例化好的對(duì)象的數(shù)據(jù) 拷貝給 新創(chuàng)建的數(shù)據(jù) ,可見說拷貝構(gòu)造函數(shù)在功能上是構(gòu)造函數(shù)的另一種

    2024年04月24日
    瀏覽(14)
  • 【python 深拷貝與淺拷貝】

    【python 深拷貝與淺拷貝】

    python 深拷貝與淺拷貝 在用影刀編寫流程的時(shí)候發(fā)現(xiàn),明明只修改人名為“小張”對(duì)應(yīng)的字典里面的值,但是所有的人名對(duì)應(yīng)的值都被修改了。 第14行,設(shè)置鍵值對(duì),值對(duì)應(yīng)的變量“初始打卡類型字典”是前面流程生成的,還是引用了原來的地方。 用python來復(fù)現(xiàn): 1、如果列

    2024年02月05日
    瀏覽(24)
  • 『C++成長(zhǎng)記』拷貝構(gòu)造函數(shù)

    『C++成長(zhǎng)記』拷貝構(gòu)造函數(shù)

    ??? 博客主頁: 小王又困了 ?? 系列專欄: C++ ?? 人之為學(xué),不日近則日退 ?? 感謝大家點(diǎn)贊??收藏?評(píng)論?? 目錄 一、拷貝構(gòu)造函數(shù) ??1.1拷貝構(gòu)造函數(shù)的概念 ??1.2拷貝構(gòu)造函數(shù)的寫法 ??1.3編譯器生成的拷貝構(gòu)造 ??1.4拷貝構(gòu)造函數(shù)的用法 ??1.5拷貝構(gòu)造函數(shù)典型調(diào)

    2024年02月04日
    瀏覽(21)
  • 【C++】:類和對(duì)象(下):explicit || 再談構(gòu)造函數(shù) || static成員 || 友元 || 內(nèi)部類 || 匿名對(duì)象 || 拷貝對(duì)象時(shí)的編譯器優(yōu)化問題 || 再次理解類和對(duì)象

    【C++】:類和對(duì)象(下):explicit || 再談構(gòu)造函數(shù) || static成員 || 友元 || 內(nèi)部類 || 匿名對(duì)象 || 拷貝對(duì)象時(shí)的編譯器優(yōu)化問題 || 再次理解類和對(duì)象

    ??類和對(duì)象(下篇) ??【本節(jié)目標(biāo)】 ??1. 再談構(gòu)造函數(shù) ??2. Static成員 ??3. 友元 ??4. 內(nèi)部類 ??5.匿名對(duì)象 ??6.拷貝對(duì)象時(shí)的一些編譯器優(yōu)化 ??7. 再次理解類和對(duì)象 ??1.1 構(gòu)造函數(shù)體賦值 在創(chuàng)建對(duì)象時(shí),編譯器通過調(diào)用構(gòu)造函數(shù),給對(duì)象中各個(gè)成員變量一個(gè)合適的初始值

    2024年01月21日
    瀏覽(26)
  • JS之深拷貝與淺拷貝

    JS之深拷貝與淺拷貝

    ?深拷貝 與 淺拷貝 ?針對(duì)于 引用類型(Object,Array,Function) 來說的 淺拷貝:在棧中分配一塊新內(nèi)存,拷貝需要拷貝的值, ? ? ? ? ? 對(duì)簡(jiǎn)單數(shù)據(jù)類型,就是拷貝值;對(duì)復(fù)雜數(shù)據(jù)類型,就是拷貝了一份棧內(nèi)存儲(chǔ)的堆內(nèi)存的地址 ?深拷貝:在堆中重新分配新內(nèi)存,存儲(chǔ)新的拷貝數(shù)據(jù)

    2024年02月09日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包