GeekBand C++面向?qū)ο蟾呒?jí)編程(上)(第二周):拾遺

本周主要記錄一些零散的知識(shí)點(diǎn)

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

帶指針的類用戶編寫自己的拷貝構(gòu)造函數(shù):
原因:編譯器默認(rèn)的拷貝構(gòu)造函數(shù)是按照bit by bit 的模式進(jìn)行的,如果成員變量中含有指針,那么兩個(gè)類中的指針成員變量將會(huì)指向同一塊內(nèi)存地址。如果其中一個(gè)類將那塊內(nèi)存釋放,將會(huì)影響到另一個(gè)類,即另一個(gè)類指針指向的地址已經(jīng)失效。

2.拷貝賦值函數(shù)#

帶指針的類用戶編寫自己的拷貝賦值函數(shù)
原因:理由同上。

3.拷貝賦值函數(shù)的自我賦值檢查#

Demo_0

MyClass s1;
...
s1 =s1;

像Demo_0中那樣s1 =s1,無(wú)意是一件非常蠢的事,雖然我們一般不會(huì)去做,但是誰(shuí)知道呢。為了要防備這種情況的發(fā)生,可以采取這樣的做法:
Demo_1

if(this == & str)
    return *this;

這是一個(gè)不錯(cuò)的做法,但其實(shí)《Effective C++》 一書中還介紹了其他的方法,書不在身邊,以后補(bǔ)。

4.何時(shí)使用引用#

返回值不是local object 就可以傳reference

5.static#

  • 在類中,可以定義static 成員數(shù)據(jù)(變量,常量),也可以定義static成員函數(shù)。
  • static成員數(shù)據(jù)在內(nèi)存中只有一份,它不屬于該類的任何一個(gè)實(shí)例,它先于類的實(shí)例化而存在。
  • static成員函數(shù)用來(lái)處理static成員數(shù)據(jù)

6.僅此一份#

  • 上面說到static成員數(shù)據(jù)在內(nèi)存中僅此一份,其實(shí)不僅如此,類的成員函數(shù)也是如此,在內(nèi)存中只有一份。所以現(xiàn)在明白了,為什么計(jì)算類的大小時(shí),從未計(jì)算過成員函數(shù)了吧。
  • 另外,既然成員函數(shù)在內(nèi)存中僅有一份,同一個(gè)類的不同實(shí)例是如何調(diào)用成員函數(shù)的呢?看下面實(shí)例:
    Demo_2
class myclass
{
public:
    void func();  
};
...
myclass m1;
myclass m2;
...
//when  calling func(),we use it in the follow form;
m1.func();
m2.func();
//Absolutely,it equals to what I show next;
func(&m1);
func(&m2);

也就是說,不同類調(diào)用成員函數(shù)時(shí),是將類的地址作為引用傳給了函數(shù)。(如果不能理解第二種寫法,可以參考操作符重載的成員數(shù)寫法)

暫時(shí)到此為止

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容