1樓:匿名使用者
1、 c++中, 建構函式和解構函式可以被顯示呼叫. 顯示呼叫預設建構函式的語法: a.
a::a();(不能寫成a.a();) , 顯示呼叫非預設建構函式的語法:
a.a::a(7);(不能寫成a.
a(7);); 顯示呼叫解構函式的語法: a.a::
~a();(可以寫成a.~a();) .
2、 顯示呼叫建構函式和解構函式就像呼叫一般的函式一樣, 並不意味著建立或銷燬物件;
3、 如果建構函式中動態分配了空間, 則顯示呼叫建構函式會造成記憶體洩露. 建立物件時的隱式建構函式呼叫已經為物件分配了動態記憶體,當用建立好的物件顯示呼叫建構函式時, 物件指向的動態記憶體更新為顯示呼叫時所分配的, 物件生命週期結束時解構函式所釋放掉的是後一次分配的動態記憶體, 也就是說建立物件時隱式建構函式呼叫所分配的那塊記憶體洩漏了.
4、 如果解構函式中釋放動態分配的空間, 則會造成多次釋放同一記憶體, 會出現嚴重錯誤.
#include
using namespace std;
class a
a(int ix)
~a()
};int main()
2樓:匿名使用者
構造可以根據引數指定呼叫,,,,,析構沒有~~~
3樓:我乃
可以這樣簡單的理解。將引數放在括號內(有參建構函式)為顯示呼叫,用"="賦值為隱式呼叫(拷貝建構函式也是一樣,存在顯式和隱式的呼叫,規則一樣)。有些實現好的類在建構函式前面會加expilict關鍵字修飾,來禁止隱式呼叫。
向前面那個回答說什麼系統會預設呼叫建構函式那不是廢話嗎,肯定定義物件的時候就自動呼叫了啊。差不多就這樣,詳細專業地解釋可以自己看教材或者別人的部落格。
4樓:節子不哭
建構函式和解構函式都是系統自動呼叫的,為什麼要顯示呼叫呢,顯示呼叫也沒啥用啊,用一個已經存在的物件呼叫建構函式,把這個已經存在的物件再建立一次? 沒有意義啊,所以不可以這樣做。
5樓:匿名使用者
include 'config.php';
if (!file_exists('install.lock'))此類事物有幾種:
推薦理由:
c++關於建構函式和解構函式呼叫次數的問題
6樓:匿名使用者
沒問題啊。
引數傳遞的時候第一次拷貝構造呼叫,
在函式返回的時候賦值給c2 再次呼叫了拷貝構造。
析構的話:c1 c2 c 三次
7樓:匿名使用者
傳遞引數和返回引數各一次拷貝建構函式,所以是2次;
有兩個物件c1 c2,外加函式返回的一個臨時物件,所以共3個物件,故解構函式3次;
c++ 建構函式和解構函式可以過載嗎
8樓:匿名使用者
建構函式可以被過載,因為建構函式可以有多個且可以帶引數。
解構函式不可以被過載,因為解構函式只能有一個,且不能帶引數。
c 中的析構函式與建構函式的區別
c 中的析構函式與建構函式的區別主要是功能上的區別 建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。析構函式 dest...
c的類中在建構函式中呼叫析構函式會發生什麼
就跟呼叫成員函式一樣,在語法上是可行的 但是由於析構函式的功能,在語義上可能會有無法預料的結果因為在物件銷毀時會隱式呼叫一次,可能會出問題同時考慮這個 偽 class a a 這個屬於合法不合理的事,除非你析構設計的就是想隨時呼叫都沒事。 無論是在基類還是在子類,類的析構函式都是不允許被顯式呼叫的,...
關於c 中析構函式析構順序問題
c 程式設計屬於邏輯思維,在設定乙個函式和數值中來回迴圈所得出的結論 無論是c語言還是c 語言,都是沒太大的順序。比如開始的c語言輸出 include vrio main 這是簡單的輸出,標頭檔案和輸出函式 輸出語句。只要一步步來,無論什麼都不會錯的。不過在c 語言裡面不能出現小錯誤,乙個小錯誤會影...