本周主要記錄一些零散的知識點
1.拷貝構(gòu)造函數(shù)#
帶指針的類用戶編寫自己的拷貝構(gòu)造函數(shù):
原因:編譯器默認的拷貝構(gòu)造函數(shù)是按照bit by bit 的模式進行的,如果成員變量中含有指針辕万,那么兩個類中的指針成員變量將會指向同一塊內(nèi)存地址。如果其中一個類將那塊內(nèi)存釋放鹿寻,將會影響到另一個類,即另一個類指針指向的地址已經(jīng)失效诽凌。
2.拷貝賦值函數(shù)#
帶指針的類用戶編寫自己的拷貝賦值函數(shù)
原因:理由同上毡熏。
3.拷貝賦值函數(shù)的自我賦值檢查#
Demo_0
MyClass s1;
...
s1 =s1;
像Demo_0中那樣s1 =s1,無意是一件非常蠢的事侣诵,雖然我們一般不會去做招刹,但是誰知道呢。為了要防備這種情況的發(fā)生窝趣,可以采取這樣的做法:
Demo_1
if(this == & str)
return *this;
這是一個不錯的做法,但其實《Effective C++》 一書中還介紹了其他的方法训柴,書不在身邊哑舒,以后補。
4.何時使用引用#
返回值不是local object 就可以傳reference
5.static#
- 在類中幻馁,可以定義static 成員數(shù)據(jù)(變量洗鸵,常量)越锈,也可以定義static成員函數(shù)。
- static成員數(shù)據(jù)在內(nèi)存中只有一份膘滨,它不屬于該類的任何一個實例甘凭,它先于類的實例化而存在。
- static成員函數(shù)用來處理static成員數(shù)據(jù)
6.僅此一份#
- 上面說到static成員數(shù)據(jù)在內(nèi)存中僅此一份火邓,其實不僅如此丹弱,類的成員函數(shù)也是如此,在內(nèi)存中只有一份铲咨。所以現(xiàn)在明白了躲胳,為什么計算類的大小時,從未計算過成員函數(shù)了吧纤勒。
- 另外坯苹,既然成員函數(shù)在內(nèi)存中僅有一份,同一個類的不同實例是如何調(diào)用成員函數(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ù)寫法)
暫時到此為止