C++構造與析構

來源:互聯網
上載者:User

  建構函式中調用虛函數
  調用的是基類中的函數不是調用衍生類別的,因為衍生類別還未構造完成。保持建構函式精簡,可以把一些操作抽出來放在成員函數中,一般不要在建構函式中調用虛函數。

  調用基類建構函式,需要放在初始化列表中,放在衍生類別函數體裡就會調用兩次基類的建構函式,第一次是編譯器插入的調用基類的無參建構函式。

  建構函式與解構函式調用順序相反,大概是因為,衍生類別可能使用基類的資料

  虛解構函式,當使用基類指標析構衍生類別對象時,保證調用正確的解構函式

下面給出一段測試代碼:

 1 class A{
2  public:
3 A(){
4 printf("構造 A\n");
5 f();
6 }
7 virtual void f(){
8 printf("A.f()\n");
9 }
10 virtual ~A(){
11 printf("析構 A\n");
12 }
13 };
14
15  class B: public A{
16  public:
17 B(): A(){
18 printf("構造 B\n");
19 f();
20 }
21 virtual void f(){
22 printf("B.f()\n");
23 }
24 virtual ~B(){
25 printf("析構 B\n");
26 }
27 };
28
29  int main(){
30 A *p = new B();
31 p->f();
32 delete p;
33 return 0;
34 }

運行結果:

[lym@localhost tmp]$ ./a.out
構造 A
A.f()
構造 B
B.f()
B.f()
析構 B
析構 A 

上面所說的幾點,應該都可以看出來。

另外:

定義變數時,對於單參建構函式

Foo apple = 8; 與 Foo apple(8); 是等價的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.