1. 程式人生 > >C++ Daily 《5》----虛函數表的共享問題

C++ Daily 《5》----虛函數表的共享問題

.net class pre int 全部 版權 ++ trac end

版權聲明:本文為博主原創文章,未經博主同意不得轉載。 https://blog.csdn.net/u012653791/article/details/25537161

問題:

包括一個以上虛函數的 class B, 它所定義的 對象是否共用一個虛函數表?


分析: 因為含有虛函數,因此對象內存包括了一個指向虛函數表的指針,可是這個指針指向的是同一個虛函數表嗎?

實驗例如以下:

class A
{
public:
  virtual void print() { cout << "print A:" << endl;}

private:
  int a;
};


A a[2];
cout << "vptr of a[0] " << *(int*)&a[0] << endl;
cout << "vptr of a[1] " << *(int*)&a[1] << endl;

結論:

結果表面,同一個類的全部對象,都共享同一個虛函數表。


派生問題:

派生類 和 基類是否共享同一個虛函數表呢?


C++ Daily 《5》----虛函數表的共享問題