偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

三分鐘讀懂C++深淺拷貝:避免常見陷阱!

開發(fā)
智能指針就像是魔法世界中的掃地機(jī)器人,自動(dòng)幫你清理和管理資源,讓你專注于創(chuàng)造更多的魔法奇跡!

嘿!想象一下你是個(gè)小魔法師,手里有一本超級(jí)無敵珍貴的魔法書,里面藏著各種神奇的咒語和配方。某天,你最好的魔法師朋友看到你念咒語變出了一只可愛的小兔子,興奮地問你能不能也學(xué)習(xí)這些魔法...

淺拷貝:一本書的兩個(gè)主人

想象一下,你有一本超級(jí)珍貴的魔法書,里面記載著各種神奇咒語 ??。有一天,你的好朋友特別想要這本書,于是你用了個(gè)復(fù)制咒語(淺拷貝)。但是!這個(gè)咒語有點(diǎn)調(diào)皮,它并沒有真的復(fù)制出一本新書,而是給了你朋友一個(gè)新書簽,指向的還是你那本原始的魔法書!

class MagicBook {
    char* spells;  // 魔法咒語在這里 ?
public:
    MagicBook(const char* text) {
        spells = new char[strlen(text) + 1];  // 為咒語騰出空間 ??
        strcpy(spells, text);  // 把咒語寫進(jìn)書里 ??
    }
};

// 哎呀!這樣復(fù)制書是很危險(xiǎn)的 ??
MagicBook book2 = book1;  // 兩個(gè)魔法師共享一本書,太冒險(xiǎn)了!??

這下可有趣了!如果你的朋友不小心把書弄臟了或者弄丟了(對(duì)象被銷毀),你的書也會(huì)跟著消失。因?yàn)閷?shí)際上你們根本就是在共用同一本書嘛!就像兩個(gè)人拿著同一本書的鑰匙,一個(gè)人把書扔了,另一個(gè)人也找不到書了!這就是淺拷貝帶來的"一損俱損"的尷尬情況啦!

什么時(shí)候需要深拷貝?讓魔法告訴你!

想象一下,當(dāng)你的魔法書里藏著一些特殊的寶物(指針成員)或者神奇的空間袋(動(dòng)態(tài)分配的資源)時(shí),簡(jiǎn)單的復(fù)制咒語可不夠用啦!這時(shí)候就需要一個(gè)更強(qiáng)大的深拷貝魔法,它能完完整整地復(fù)制出一本全新的魔法書,讓每位魔法師都擁有屬于自己的獨(dú)立寶藏!

來看看這本超級(jí)魔法書是怎么施展深拷貝魔法的吧:

class AdvancedMagicBook {
    char* title;         // 魔法書的真名 ??
    int* pageNumbers;    // 神秘頁碼 ??
    size_t pageCount;    // 書的厚度 ??
    
public:
    // 創(chuàng)造一本全新的魔法書 ??
    AdvancedMagicBook(const char* bookTitle, size_t pages) {
        pageCount = pages;
        title = new char[strlen(bookTitle) + 1];      // 為書名開辟魔法空間 ?
        strcpy(title, bookTitle);                     // 寫下神秘的書名 ??
        pageNumbers = new int[pages];                 // 為每頁施加編號(hào)魔法 ??
        for(size_t i = 0; i < pages; i++) {
            pageNumbers[i] = i + 1;
        }
    }
    
    // 完美復(fù)制魔法書的咒語 ??
    AdvancedMagicBook(const AdvancedMagicBook& other) {
        pageCount = other.pageCount;
        
        title = new char[strlen(other.title) + 1];    // 復(fù)制書名魔法 ??
        strcpy(title, other.title);
        
        pageNumbers = new int[pageCount];             // 復(fù)制頁碼魔法 ??
        memcpy(pageNumbers, other.pageNumbers, pageCount * sizeof(int));
    }
    
    // 魔法書使用完畢,清理咒語 ??
    ~AdvancedMagicBook() {
        delete[] title;         // 消除書名魔法 ?
        delete[] pageNumbers;   // 清除頁碼魔法 ??
    }
};

這樣,每位魔法師都能擁有自己獨(dú)一無二的魔法書啦!再也不用擔(dān)心和其他魔法師共用一本書帶來的各種麻煩了!

深拷貝小貼士:魔法師必讀

親愛的魔法師朋友們,在使用深拷貝魔法時(shí)要特別小心哦!想象一下,當(dāng)你復(fù)制一本超大的魔法書時(shí),需要消耗不少魔法能量呢(占用更多內(nèi)存)!就像搬家一樣,把所有東西都復(fù)制一遍確實(shí)很累人。

有時(shí)候施展深拷貝魔法可能會(huì)遇到一些小意外,比如魔法能量不夠用了(內(nèi)存分配失敗)。別擔(dān)心,我們有一個(gè)超級(jí)安全的魔法配方 ??,它能確保即使魔法失敗了,你的寶貴魔法書也不會(huì)受到任何損害!

// 看看這個(gè)超級(jí)安全的魔法配方 ?
AdvancedMagicBook& operator=(const AdvancedMagicBook& other) {
    if (this != &other) {  // 先確認(rèn)不是自己給自己施法 ??
        // 準(zhǔn)備新的魔法材料 ??
        char* newTitle = new char[strlen(other.title) + 1];
        int* newPages = new int[other.pageCount];
        
        // 小心翼翼地復(fù)制魔法內(nèi)容 ??
        strcpy(newTitle, other.title);
        memcpy(newPages, other.pageNumbers, other.pageCount * sizeof(int));
        
        // 清理舊的魔法痕跡 ??
        delete[] title;
        delete[] pageNumbers;
        
        // 注入新的魔法能量 ?
        title = newTitle;
        pageNumbers = newPages;
        pageCount = other.pageCount;
    }
    return *this;
}

不過等等!現(xiàn)代魔法世界已經(jīng)發(fā)展出了更智能的法術(shù)啦!它們就像會(huì)自動(dòng)打掃的掃帚一樣,幫我們處理各種復(fù)雜的資源管理問題??靵砜纯催@個(gè)超酷的智能魔法吧!

智能魔法:使用智能指針

嘿,親愛的魔法師朋友們!現(xiàn)代 C++ 就像是魔法世界中的一場(chǎng)革命,為我們帶來了更智能的資源管理方式!想象一下,智能指針就像是你的小助手,幫你打理一切復(fù)雜的資源問題,讓你輕松無憂地施展魔法!

#include <memory>

class ModernMagicBook {
    std::unique_ptr<char[]> spells;  // 獨(dú)一無二的魔法咒語 ??
    std::shared_ptr<int> usageCount; // 共享的魔法能量計(jì)數(shù)器 ??
    
public:
    ModernMagicBook(const char* text) {
        spells = std::make_unique<char[]>(strlen(text) + 1); // 為咒語開辟獨(dú)特空間 ?
        strcpy(spells.get(), text); // 將咒語銘刻在書中 ???
        usageCount = std::make_shared<int>(0); // 初始化魔法能量計(jì)數(shù)器 ??
    }
    
    // 使用智能指針,編譯器生成的拷貝構(gòu)造函數(shù)就能正確處理資源了!?
};

智能指針就像是魔法世界中的掃地機(jī)器人,自動(dòng)幫你清理和管理資源,讓你專注于創(chuàng)造更多的魔法奇跡!

總結(jié)

  • 淺拷貝適用于簡(jiǎn)單的值類型對(duì)象
  • 當(dāng)類包含指針或動(dòng)態(tài)資源時(shí),必須實(shí)現(xiàn)深拷貝
  • 考慮使用智能指針來自動(dòng)管理資源
  • 記住編寫析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)和賦值運(yùn)算符的規(guī)則

現(xiàn)在你已經(jīng)掌握了深淺拷貝的魔法精髓,去創(chuàng)造你自己的魔法世界吧!

責(zé)任編輯:趙寧寧 來源: everystep
相關(guān)推薦

2021-10-27 05:47:53

通信協(xié)議協(xié)議網(wǎng)絡(luò)技術(shù)

2025-02-13 08:04:49

spliceCPU數(shù)據(jù)

2024-05-16 11:13:16

Helm工具release

2009-11-09 12:55:43

WCF事務(wù)

2024-12-18 10:24:59

代理技術(shù)JDK動(dòng)態(tài)代理

2024-01-16 07:46:14

FutureTask接口用法

2021-04-20 13:59:37

云計(jì)算

2023-12-27 08:15:47

Java虛擬線程

2024-08-30 08:50:00

2022-02-17 09:24:11

TypeScript編程語言javaScrip

2020-06-30 10:45:28

Web開發(fā)工具

2013-06-28 14:30:26

棱鏡計(jì)劃棱鏡棱鏡監(jiān)控項(xiàng)目

2025-10-27 01:35:00

2024-12-17 08:10:00

C++20LambdaC++

2021-12-17 07:47:37

IT風(fēng)險(xiǎn)框架

2025-02-24 10:40:55

2020-06-29 07:42:20

邊緣計(jì)算云計(jì)算技術(shù)

2024-10-15 09:18:30

2024-07-05 09:31:37

2023-12-04 18:13:03

GPU編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)