日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

effective C++ 条款 5:了解c++默认编写并调用那些函数

發(fā)布時間:2024/6/14 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 effective C++ 条款 5:了解c++默认编写并调用那些函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

編譯給會為一個空類聲明一個default構(gòu)造函數(shù)、一個copy構(gòu)造函數(shù)、一個copy assignment操作符、和一個析構(gòu)函數(shù)。所有這些都是public且inline:

class Empty{};

就像是寫了這樣的代碼:

class Empty{

??? Empty(){…}

??? Empty(const Empty& rhs) {…}

??? ~Empty(){…}

??? Empty& operator=(const Empty& rhs){…}

};

唯有當(dāng)這些函數(shù)被需要,它們才會被編譯器創(chuàng)建出來。

default構(gòu)造函數(shù)和析構(gòu)函數(shù),主要做些調(diào)用base classes和non-static成員變量的構(gòu)造函數(shù)和析構(gòu)函數(shù)。編譯器產(chǎn)出的析構(gòu)函數(shù)是個non-virtual,除非這個class的base class自身聲明有virtual 析構(gòu)函數(shù)(virtual屬性來自base class)。copy構(gòu)造函數(shù)是以被拷貝的對象的成員變量為初值,構(gòu)造自己的成員變量, 對于內(nèi)置類型則是拷貝每一個bits來完成初始化。copy assignment操作符執(zhí)行基本上和copy構(gòu)造一樣。

class NameObject{
public:
??? NameObject(std::string& name, const int& value);
private:
??? std::string& nameValue;
??? const int objectValue;
};

inline void test05()
{
??? std::string newDog("Persephone");
??? std::string oleDog("Satch");
??? NameObject p(newDog, 2);
??? NameObject s(oleDog, 36);

//??? p = s;?????? //error C2582: 'NameObject' : 'operator =' function is unavailable
}

c++不允許讓reference改指向不同對象,而且不能更改const對象。所以編譯器生成的copy assignment操作符無能為力, 如果想賦值只能自己定義copy assignment操作符了。

如果base classes將copy assignment操作符聲明為private編譯器將拒絕為其derived classes生成一個copy assignment操作符

轉(zhuǎn)載于:https://www.cnblogs.com/lidan/archive/2012/01/07/2315766.html

總結(jié)

以上是生活随笔為你收集整理的effective C++ 条款 5:了解c++默认编写并调用那些函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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