成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++ 默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和移動構(gòu)造函數(shù)的區(qū)別

開發(fā) 前端
默認(rèn)構(gòu)造函數(shù)是沒有任何參數(shù)的構(gòu)造函數(shù),或者所有參數(shù)都有默認(rèn)值的構(gòu)造函數(shù)。當(dāng)我們創(chuàng)建一個對象時,若沒有提供初始化參數(shù),程序會調(diào)用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化。 

構(gòu)造函數(shù)三大類型,默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和移動構(gòu)造函數(shù)。 

1.默認(rèn)構(gòu)造函數(shù) (Default Constructor) 

默認(rèn)構(gòu)造函數(shù)是沒有任何參數(shù)的構(gòu)造函數(shù),或者所有參數(shù)都有默認(rèn)值的構(gòu)造函數(shù)。當(dāng)我們創(chuàng)建一個對象時,若沒有提供初始化參數(shù),程序會調(diào)用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化。 

特點: 

默認(rèn)構(gòu)造函數(shù)不需要參數(shù),或者所有參數(shù)都有默認(rèn)值。 

如果沒有顯式定義,編譯器會自動生成一個默認(rèn)構(gòu)造函數(shù)(如果沒有其他構(gòu)造函數(shù)的話)。 

它用于初始化對象的成員變量,并確保對象處于有效狀態(tài)。 

示例: 

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {  // 默認(rèn)構(gòu)造函數(shù)
        cout << "Default constructor called!" << endl;
    }
};

int main() {
    MyClass obj;  // 創(chuàng)建對象時調(diào)用默認(rèn)構(gòu)造函數(shù)
    return 0;
}

輸出: 

Default constructor called!

在這個示例中,我們定義了一個名為 MyClass 的類,并實現(xiàn)了一個默認(rèn)構(gòu)造函數(shù)。當(dāng)我們創(chuàng)建 obj 對象時,程序自動調(diào)用了默認(rèn)構(gòu)造函數(shù)。 

2. 拷貝構(gòu)造函數(shù) (Copy Constructor)

拷貝構(gòu)造函數(shù)用于通過現(xiàn)有對象來創(chuàng)建一個新的對象。它通常用于對象的復(fù)制操作,例如將一個對象傳遞給函數(shù)、或者返回一個對象時。 

特點: 

拷貝構(gòu)造函數(shù)接受一個類的常量引用作為參數(shù)。 

它的作用是通過另一個對象的內(nèi)容來初始化新對象。 

當(dāng)對象被復(fù)制時,編譯器自動調(diào)用拷貝構(gòu)造函數(shù)。 

示例: 

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {  // 默認(rèn)構(gòu)造函數(shù)
        cout << "Default constructor called!" << endl;
    }

    MyClass(const MyClass& other) {  // 拷貝構(gòu)造函數(shù)
        cout << "Copy constructor called!" << endl;
    }
};

int main() {
    MyClass obj1;  // 調(diào)用默認(rèn)構(gòu)造函數(shù)
    MyClass obj2 = obj1;  // 調(diào)用拷貝構(gòu)造函數(shù)
    return 0;
}

輸出: 

Default constructor called!
Copy constructor called!

在這個示例中,我們創(chuàng)建了一個對象 obj1,并將其傳遞給 obj2,這時會調(diào)用拷貝構(gòu)造函數(shù)來創(chuàng)建一個新的對象 obj2,并復(fù)制 obj1 的內(nèi)容。 

3. 移動構(gòu)造函數(shù) (Move Constructor) 

移動構(gòu)造函數(shù)用于通過轉(zhuǎn)移資源來構(gòu)造對象,避免不必要的資源復(fù)制。在某些情況下,當(dāng)我們傳遞臨時對象或者即將銷毀的對象時,移動構(gòu)造函數(shù)會“竊取”對象的資源,而不是進(jìn)行復(fù)制操作。這種方式大大提高了程序的性能,尤其是在處理大對象或動態(tài)內(nèi)存分配時。  

特點: 

移動構(gòu)造函數(shù)接受一個右值引用作為參數(shù)。 

它會將資源從一個對象轉(zhuǎn)移到另一個對象,而不是復(fù)制資源。 

移動構(gòu)造函數(shù)通常用于處理臨時對象或返回對象。 

示例: 

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {  // 默認(rèn)構(gòu)造函數(shù)
        cout << "Default constructor called!" << endl;
    }

    MyClass(MyClass&& other) {  // 移動構(gòu)造函數(shù)
        cout << "Move constructor called!" << endl;
    }
};

MyClass createObject() {
    MyClass temp;
    return temp;  // 移動構(gòu)造函數(shù)被調(diào)用
}

int main() {
    MyClass obj = createObject();  // 使用移動構(gòu)造函數(shù)
    return 0;
}

輸出: 

Default constructor called!
Move constructor called!

在這個示例中,createObject 函數(shù)返回一個 MyClass 對象。當(dāng) temp 返回時,程序會調(diào)用移動構(gòu)造函數(shù),因為 temp 是一個臨時對象。通過移動構(gòu)造函數(shù),obj 將直接接管 temp 的資源,而無需復(fù)制資源。 

4. 總結(jié) 

默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和移動構(gòu)造函數(shù)各自有不同的用途:  

默認(rèn)構(gòu)造函數(shù):當(dāng)我們創(chuàng)建一個對象時,它會被調(diào)用,進(jìn)行默認(rèn)初始化。 

拷貝構(gòu)造函數(shù):在需要復(fù)制對象時被調(diào)用,如對象傳遞、返回值傳遞等。 

移動構(gòu)造函數(shù):當(dāng)傳遞或返回臨時對象時使用,它通過“竊取”資源避免了復(fù)制,提升了性能。 

責(zé)任編輯:武曉燕 來源: CppPlayer
相關(guān)推薦

2024-12-06 12:00:00

C++構(gòu)造函數(shù)

2014-05-29 10:54:20

C++構(gòu)造函數(shù)

2022-07-26 00:36:06

C#C++函數(shù)

2023-11-28 11:51:01

C++函數(shù)

2010-01-28 10:49:22

C++構(gòu)造函數(shù)

2011-07-20 13:40:09

拷貝構(gòu)造函數(shù)

2009-08-13 17:30:30

C#構(gòu)造函數(shù)

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2010-07-20 09:52:27

Perl構(gòu)造函數(shù)

2021-12-10 10:45:36

C++函數(shù)Stock

2009-08-14 17:24:28

C#構(gòu)造函數(shù)和析構(gòu)函數(shù)

2010-01-25 14:00:27

C++類

2010-01-27 16:10:32

C++靜態(tài)構(gòu)造函數(shù)

2010-01-27 10:13:22

C++類對象

2010-01-22 11:13:16

C++靜態(tài)

2010-01-25 14:43:00

C++構(gòu)造函數(shù)

2010-01-25 17:05:37

C++語言

2009-07-31 14:15:38

C# 構(gòu)造函數(shù)

2009-08-24 18:09:13

C#構(gòu)造函數(shù)

2009-09-03 13:14:55

C#構(gòu)造函數(shù)C#析構(gòu)函數(shù)
點贊
收藏

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

主站蜘蛛池模板: 在线 丝袜 欧美 日韩 制服 | 奇米超碰在线 | 一区二区福利视频 | 国产乡下妇女做爰 | 国产真实精品久久二三区 | 欧美婷婷| 精品91久久| 国产精品久久久久一区二区三区 | 亚洲高清在线观看 | 亚洲91精品 | 欧美不卡网站 | 亚洲精品视频在线观看免费 | 国产成人av一区二区三区 | www.国产 | 成人在线观看欧美 | 欧美日韩福利视频 | 中日韩毛片 | 欧美日韩电影在线 | 在线免费激情视频 | 久久国产精品首页 | 91一区二区三区 | 国产高清视频在线观看 | 国产精品99精品久久免费 | 精品网站999| 青青草一区二区三区 | 午夜爽爽爽男女免费观看 | 国内久久 | 三级成人在线 | 请别相信他免费喜剧电影在线观看 | 亚洲欧洲精品一区 | 人人九九精 | 日本二区在线观看 | 久久国产精品免费一区二区三区 | 亚洲精品天堂 | 国产精品国产a级 | 日韩综合网 | 精品欧美乱码久久久久久 | 国产一区二 | 在线观看国产 | 亚洲精品日韩在线观看 | www国产成人免费观看视频,深夜成人网 |