c中建構函式和析構函式能不能被顯示呼叫

2021-09-04 03:24:54 字數 1566 閱讀 4591

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建構函式和析構函式可以過載嗎

因為對於後者來說,當執行my class c1語句時,c1可以呼叫my class建立物件,也可以呼叫my class float x 3.5,float y 8.5 建立物件.但是這會產生兩個不同的c1物件,極易發生歧義。所以系統不知道要呼叫那個建構函式產生物件,也不會允許程式這麼做。c 建構函式...

什麼是c析構函式,在C 中什麼叫析構函式,怎麼用啊?舉個列啊,謝謝!!!

析構函式和建構函式正好相反.建構函式是和類同名.沒有返回值.析構函式是在類名前加 也沒有返回值.建構函式上在物件建立時執行.析構函式是在程式結束時執行.一般時候析構函式裡面寫的都是一些資源 之類的東西.不過c 的析構函式的呼叫機制和c 不同.並不能保證每次都會呼叫.所以最好不要利用c 的析構函式來 ...

c或c 中函式能不能返回多個值

c系列語言是不能抄的,只能返襲回乙個返bai回值。但糾正一下三樓的說法du,不是所有語zhi言都是這樣,比dao如matlab就可以返回多個。如果在c 語言中需要返回多個值可以有以下三種方法 1 返回乙個陣列的首位址,那麼可以把整個陣列的元素返回。例如 double a a f double f 但...