2016-11-01 17 views
0

是否可以通過有趣的初始化和/或強制轉換基類來實現具有純虛擬方法的抽象類或類的實例?VS C++編譯器可能會錯過抽象類的實例化

我正在使用VS14編譯器,我想知道如果編譯器可能會錯過這個?這個類和它的用途在單獨的程序集中。

要清楚我不是試圖實現這一點,只是看着錯誤,並想知道這是否會導致調用純虛方法的運行時異常。

+1

...你確定你沒有處理[切片問題](http://stackoverflow.com/questions/274626/what-is-object-slicing)?它*看起來*相關... – jaggedSpire

+0

@jaggedSpire無法切入抽象類,因爲無論如何您都無法實例化抽象類。 – Brian

+0

如果碰巧看到對純虛函數的調用,那是因爲該函數是從抽象類的構造函數或析構函數調用的(直接或間接)。 – eran

回答

0

如果您的程序包含未定義的行爲,則可能發生任何事情。

但一般來說,不,不尋常的轉換不會讓你創建一個抽象基類類型的完整對象。

但是,該錯誤可能是由於在構造或銷燬期間嘗試調用純虛擬方法(這是UB的一種形式),此時完整對象不存在,所以適當的最終覆蓋不是調用。爲了避免這些問題,通常最好不要爲正在構建或銷燬的對象調用虛擬方法(直接或間接)。