第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是三法則?

什么是三法則?

躍然一笑 2019-05-20 15:33:00
什么是抄襲的對象是什么意思?什么是復(fù)制構(gòu)造函數(shù)和復(fù)制賦值運(yùn)算符?我什么時候需要自己申報?如何防止復(fù)制對象?
查看完整描述

6 回答

?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗 獲得超13個贊

基本上如果你有一個析構(gòu)函數(shù)(不是默認(rèn)的析構(gòu)函數(shù)),這意味著你定義的類有一些內(nèi)存分配。假設(shè)該類在某些客戶端代碼之外或由您使用。

    MyClass x(a, b);
    MyClass y(c, d);
    x = y; // This is a shallow copy if assignment operator is not provided

如果MyClass只有一些原始類型成員,則默認(rèn)賦值運(yùn)算符可以工作,但如果它有一些指針成員和沒有賦值運(yùn)算符的對象,則結(jié)果將是不可預(yù)測的。因此我們可以說如果在類的析構(gòu)函數(shù)中有刪除的東西,我們可能需要一個深度復(fù)制操作符,這意味著我們應(yīng)該提供一個復(fù)制構(gòu)造函數(shù)和賦值操作符。


查看完整回答
反對 回復(fù) 2019-05-20
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊

我什么時候需要自己申報?


三法則規(guī)定如果你宣布任何一個


復(fù)制構(gòu)造函數(shù)

復(fù)制賦值運(yùn)算符

析構(gòu)函數(shù)

那么你應(yīng)該宣布這三個。它源于這樣的觀察,即接管復(fù)制操作的意義的需要幾乎總是源于執(zhí)行某種資源管理的類,并且?guī)缀蹩偸前凳?/p>


在一個復(fù)制操作中進(jìn)行的任何資源管理可能需要在另一個復(fù)制操作中完成


類析構(gòu)函數(shù)也將參與資源的管理(通常是釋放它)。要管理的經(jīng)典資源是內(nèi)存,這就是為什么管理內(nèi)存的所有標(biāo)準(zhǔn)庫類(例如,執(zhí)行動態(tài)內(nèi)存管理的STL容器)都聲明“三大”:復(fù)制操作和析構(gòu)函數(shù)。


規(guī)則三的結(jié)果是,用戶聲明的析構(gòu)函數(shù)的存在表明簡單的成員明智副本不太可能適合于類中的復(fù)制操作。反過來,這表明如果一個類聲明了一個析構(gòu)函數(shù),那么復(fù)制操作可能不應(yīng)該自動生成,因為它們不會做正確的事情。在采用C ++ 98時,這種推理的重要性并未得到充分認(rèn)識,因此在C ++ 98中,用戶聲明的析構(gòu)函數(shù)的存在對編譯器生成復(fù)制操作的意愿沒有影響。在C ++ 11中仍然如此,但僅僅因為限制生成復(fù)制操作的條件會破壞過多的遺留代碼。


如何防止復(fù)制對象?


將復(fù)制構(gòu)造函數(shù)和復(fù)制賦值運(yùn)算符聲明為私有訪問說明符。


class MemoryBlock

{

public:


//code here


private:

MemoryBlock(const MemoryBlock& other)

{

   cout<<"copy constructor"<<endl;

}


// Copy assignment operator.

MemoryBlock& operator=(const MemoryBlock& other)

{

 return *this;

}

};


int main()

{

   MemoryBlock a;

   MemoryBlock b(a);

}

在C ++ 11及更高版本中,您還可以聲明復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符已刪除


class MemoryBlock

{

public:

MemoryBlock(const MemoryBlock& other) = delete


// Copy assignment operator.

MemoryBlock& operator=(const MemoryBlock& other) =delete

};



int main()

{

   MemoryBlock a;

   MemoryBlock b(a);

}


查看完整回答
反對 回復(fù) 2019-05-20
  • 6 回答
  • 0 關(guān)注
  • 633 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號