日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

C++中拷贝构造函数

發(fā)布時(shí)間:2025/3/15 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中拷贝构造函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

拷貝構(gòu)造函數(shù)根據(jù)名字可以看得出來(lái),當(dāng)對(duì)象發(fā)生拷貝時(shí)調(diào)用的函數(shù)。該函數(shù)與構(gòu)造函數(shù)和析構(gòu)函數(shù)一樣,不會(huì)被顯式調(diào)用。我們只是說(shuō)當(dāng)對(duì)象發(fā)生拷貝時(shí)調(diào)用,那么什么時(shí)候會(huì)發(fā)生對(duì)象拷貝呢?我們來(lái)看一下。

  • 函數(shù)以對(duì)象參數(shù)進(jìn)行傳遞時(shí)。
  • 函數(shù)以對(duì)象為返回值時(shí)。
  • 通過(guò)同一類型的對(duì)象來(lái)初始化新創(chuàng)建的對(duì)象時(shí)。
    如果類中沒(méi)有定義拷貝構(gòu)造函數(shù),編譯器會(huì)自動(dòng)為我們創(chuàng)造一個(gè)。但是如果類中有指針變量或者動(dòng)態(tài)內(nèi)存分配時(shí),必須自己手動(dòng)添加一個(gè)拷貝構(gòu)造函數(shù)。
    我們先來(lái)看一下,拷貝構(gòu)造函數(shù)應(yīng)該如何添加:
classname(const classname &obj) {/*構(gòu)造函數(shù)主體*/ }

下面的例子中,既是指針變量又是動(dòng)態(tài)分配內(nèi)存:

#include <iostream> using namespace std;class Line{public:int getL(void);Line(int len);Line(const Line &obj);~Line();private:int *ptr;};Line::Line(int Len) {cout << "調(diào)用構(gòu)造函數(shù)" << endl;ptr = new int;*ptr = Len;}Line::Line(const Line &obj) {cout << "調(diào)用拷貝構(gòu)造函數(shù),并為指針ptr分配內(nèi)存" << endl;ptr = new int;*ptr = *obj.ptr; }Line::~Line() {cout << "調(diào)用析構(gòu)函數(shù),釋放內(nèi)存。" << endl; }int Line::getL(void) {return *ptr; }void display(Line obj) {cout << "Line的值為:" << obj.getL() << endl; }int main() {Line line(10);Line line2 = line;display(line);return 0; }

對(duì)于這樣的程序,在學(xué)習(xí)的過(guò)程中,我們應(yīng)該先自己想一遍會(huì)輸出什么,然后再點(diǎn)擊運(yùn)行,看運(yùn)行結(jié)果和自己的有什么出入。
就這一個(gè)例子而言:首先定義line會(huì)調(diào)用構(gòu)造函數(shù)初始化,然后line2 = line 發(fā)生了對(duì)象拷貝,會(huì)調(diào)用一次拷貝構(gòu)造函數(shù)。然后在函數(shù)傳參的過(guò)程中會(huì)發(fā)生一次拷貝,再調(diào)用一次拷貝構(gòu)造函數(shù)。并且在最后,定義的line,line2被銷(xiāo)毀時(shí)會(huì)調(diào)用兩次析構(gòu)函數(shù),最重要的一點(diǎn)是,在子函數(shù)執(zhí)行結(jié)束時(shí)也會(huì)調(diào)用一次析構(gòu)函數(shù),銷(xiāo)毀傳參時(shí)得到的拷貝構(gòu)造函數(shù)。
根據(jù)分析讓我們來(lái)看一下運(yùn)行結(jié)果:

調(diào)用構(gòu)造函數(shù) 調(diào)用拷貝構(gòu)造函數(shù),并為指針ptr分配內(nèi)存 調(diào)用拷貝構(gòu)造函數(shù),并為指針ptr分配內(nèi)存 Line的值為:10 調(diào)用析構(gòu)函數(shù),釋放內(nèi)存。 調(diào)用析構(gòu)函數(shù),釋放內(nèi)存。 調(diào)用析構(gòu)函數(shù),釋放內(nèi)存。

總結(jié)

以上是生活随笔為你收集整理的C++中拷贝构造函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。