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

2022-08-03 11:06:15 字數 1163 閱讀 6472

(乙個學姐提到的問題~)

#include

using namespace std;

class a

a(int ix)

~a()

}; int main()

輸出: default constructor is called. // <1>

default constructor is called. // <2>

another constructor is called. // <3>

destructor is called.          // <4>

default constructor is called. // <5>

another constructor is called. // <6>

another constructor is called. // <7>

destructor is called.          // <8>

destructor is called.          // <9>

destructor is called.          // <10>

destructor is called.          // <11>

總結:

c++中, 建構函式和析構函式可以被顯示呼叫. 顯示呼叫預設建構函式的語法: a.a::a();(不能寫成a.a();) , 顯示呼叫非預設建構函式的語法: a.a::a(7);(不能寫成a.a(7);); 顯示呼叫析構函式的語法: a.a::~a();(可以寫成a.~a();) .

顯示呼叫建構函式和析構函式就像呼叫一般的函式一樣, 並不意味著建立或銷毀物件;

如果建構函式中動態分配了空間, 則顯示呼叫建構函式會造成記憶體洩露. 建立物件時的隱式構造函式呼叫已經為物件分配了動態記憶體. 當用建立好的物件顯示呼叫建構函式時, 物件指向的動態記憶體更新顯示呼叫時所分配的, 物件生命週期結束時析構函式所釋放掉的是後一次分配的動態記憶體, 也就是說建立物件時隱式構造函式呼叫所分配的那塊記憶體洩漏了.

如果析構函式中釋放動態分配的空間, 則會造成多次釋放同一記憶體, 會出現嚴重錯誤.

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

include using namespace std class a a int ix a int main 輸出 default constructor is called.1 default constructor is called.2 another constructor is call...

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

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!view plaincopy to clipboardprint?include using namespace std class a a int ix a int main include using namespace std class a...

能不能在建構函式和析構函式中呼叫虛函式?

可以,但是達不到想要的效果,應該盡可能避免在建構函式和析構函式中呼叫虛函式。class base public base cout 當定義乙個derived例項物件時,在base的建構函式中呼叫size 會被靜態的決議為base size 而不是derived size 可以這麼理解,當在構造bas...