原创 c++引用與指針的區別與聯繫

引用:某個變量的“別名”,對用操作與直接操作變量是一樣的。 聯繫:引用本質上是一個指針。 區別: 1.引用必須初始化,指針可以不初始化。 2.指針可以爲NULL,引用不能爲NULL。 3.引用本身不佔用內存空間,指針在32位系統中佔4個字

原创 c++可以重載與不可以重載的操作符

可以重載的有: () [] , operator new operator delete operator new[] operator delete[] + - * / += -= == > < >= <= % ->* ~ != ++

原创 引用作爲函數與指針及值傳遞的差別

傳引用與傳指針的聯繫與區別: 聯繫: 傳引用給函數與傳指針效果是一樣的,引用只是變量的一個別名。指針相當於保存了變量地址,間接操作對象。 區別: 1.使用引用不需要給形參分配空間,指針則需要給形參分配空間。 2.在調用處,還是需要實參地址

原创 c++設計中可以利用析構函數避免泄露資源

假設有這樣一個函數 B::virtual void fun(int i) { while(i--) { A* ptr=readdata(i);//其中A爲抽象基類 ptr->fun1();//假設fun1是A中的純虛函數 delete p

原创 c++拋出異常方式與C語言的區別

c++中,拋出異常採用的是try catch throw,而C語言使用的則是setjmp與longjmp 。 C語言中setjmp是用來保存程序運行時堆棧環境,而longjmp是用來恢復先前程序中的setjmp所保存的堆棧環境。 setj

原创 在構造函數中避免資源泄漏

c++析構函數不會析構沒有構造好的對象,意思就是如果程序在構造對象時拋出異常,則析構函數不會析構此對象,導致資源泄漏。 針對這種情況,就需要考慮在構造函數中將異常情況考慮。 具體例子在more effective c++條款10.

原创 c++中將引用作爲函數返回值需要注意的一些地方

1.不能返回局部變量的引用。局部變量是在棧裏面創建的,函數調用完,就會被釋放。引用所引用的地址就沒有了。 2.不能返回內部用new分配的內存的引用。因爲new了之後,沒有delete,所以,會導致內存泄漏。 3.返回靜態對象的引用要視情況

原创 c++operator new/new operator、operator delete/delete operator的區別與聯繫

c++可以重載運算符,其中operator new/operator delete是可以重載的。 但是,new operator與delete operator都是內建操作符,不能重載 string* p= new s("aaaaaaa"

原创 c++中new/delete與malloc/free的區別與聯繫

聯繫: 1.返回的都是指向某一空間的指針。 2.都是在堆上分配空間。 區別: 1.new會構造對象並調用構造函數初始化對象,而malloc只是分配一段空間。 2.delete會調用析構函數釋放對象,而free僅僅只是釋放一段空間。 總結:

原创 不要以多態的方式處理數組

基類,派生類的sizeof不同。如果以多態的方式處理數組的話,就類似與int類型數組,卻每次要移動sizeof(double)一樣。 基類與派生類大小不同,一般派生類比較大,當你傳遞一個派生類對象數組給一個參數是基類對象數組的函數時,Ar

原创 c++中static成員函數、成員變量作用

當函數的行爲對所有的派生類都一致時,可以將其聲明爲靜態成員函數。 好處: 1.可以實現某些特殊的設計模式。如:Singleton 2.可以把某些系統的回調函數以靜態函數的形式封裝到類的內部。因爲系統API的回調函數通常都是獨立的,沒有th

原创 不要重載&& ||和,操作符

首先,我們來說一下爲什麼不要重載&&與|| &&與|| 具有驟死式語意。即(在第一個條件爲真時 || 即爲真,不會判斷第二個條件) 假設你重載了&& 則當你調用的時候會出現這種情況 if(a1 && a2)//a1、a2是重載了&& 的類

原创 c++強制類型轉換補充

c++要添加幾種新式類型轉換的原因: 1.舊式的類型轉換幾乎允許將任何其他類型轉換成你需要的類型,這是非常拙劣的。 2.舊式的類型轉換不容易辨識。 c++的四種新的類型轉換: static_cast:與舊式的類型轉換功能一樣,不可以在賦值

原创 確保非局部靜態對象使用前被初始化

這種情況主要在於:一個對象的初始化要靠另一個對象的初始化。 非局部靜態對象: 定義在全局或者名字空間範圍內的對象 在一個類中被聲明爲static的對象 在一個文件範圍內被定義爲static。 做法: 可以返回局部靜態對象的引用來達到初始化

原创 c++類型轉換函數的麻煩及解決方法

c++如同C語言一樣, 有語言本身的隱式類型轉換。如將char轉換成int int轉換爲double等 c++還可以將double轉換成int 即向下轉換。 這是語言本身提供的,我們不能控制。但是對於我們自己寫的類卻可以自己控制。有兩種函