__declspec(novtable) 的用法
__declspec(novtable) 在C++中接口中廣泛應用. 不容易看到它是因為在很多地方它都被定義成為了宏. 比如說ATL活動模板庫中的ATL_NO_VTABLE, 其實就是__declspec(novtable).
__declspec(novtable) 就是讓類不要有虛函數表以及對虛函數表的初始化代碼, 這樣可以節省運行時間和空間. 但是這個類一定不允許生成實例, 因為沒有虛函數表, 就無法對虛函數進行調用. 因此, __declspec(novtable)一般是應用於接口(其實就是包含純虛函數的類), 因為接口包含的都是純虛函數, 不可能生成實例. 我們把 __declspec(novtable)應用到接口類中, 這些接口類就不用包含虛函數表和初始化虛函數表的代碼了. 它的派生類會自己包含自己的虛函數表和初始化代碼.
最後更新:2017-04-02 06:51:37