本周主要記錄一些零散的知識(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í)到此為止