vtable

    1熱度

    2回答

    很多次在Visual Studio for C++中,我們都可以在調試器中看到類的vfptr或vptr地址。在Visual Studio中,我們還可以通過內置的內存視圖分析線程的內存。 但是可見的信息是二進制的。 有沒有什麼方法可以通過虛擬指針地址獲得更多關於類類型或任何其他有用信息以用於調試目的?(考慮到我們可以通過Visual Studio中的此地址分析內存本身)

    0熱度

    1回答

    我試圖通過在切換渲染目標之前從深度緩衝區中複製IDirect3DSurface9切換渲染目標來解決XNA 3.1自動清除深度緩衝區,然後恢復稍後的深度緩衝區。 在代碼中,getDepthBuffer方法是一個指向IDirect3DDevice9 GetDepthStencilBuffer函數的指針。該方法的指針似乎是正確的,但是當我嘗試獲取IDirect3DSurface9指針時,它將返回一個異常

    7熱度

    6回答

    讓虛擬表和虛擬指針數說,我們有以下程序: class A { public: virtual fun(){}; }; class B:public A { public: virtual fun(){}; }; int main() { A a1; B b1; } 我的問題是有多少vtables多少vptrs將被創建,當我們運行這個

    8熱度

    2回答

    我瞭解,如果一個課程至少包含一個虛擬功能,則該課程將具有VTABLE。我希望看到VTABLE的內容。有沒有辦法顯示它? 具體來說,gcc中是否有選項顯示VTABLE的一個類?

    8熱度

    2回答

    使用__declspec(novtable)屬性可以在MSVC中完成抑制C++ vtable生成。但是,它似乎是GNU C++編譯器的there is no equivalent attribute。事實上,將虛擬桌面留給純虛擬類不必要地鏈接到__cxa_abort()和許多其他地方,我想避免發生這種情況,因爲我正在爲嵌入式系統編程。所以我該怎麼做? struct ISomeInterface

    2熱度

    3回答

    有這樣的代碼: #include <iostream> class Base { int x; }; class Derived : virtual public Base { int y; }; int main() { std::cout << sizeof(Derived) << std::endl; // prints 12 r

    32熱度

    5回答

    是否有可能繼承沒有虛擬方法?編譯器說以下代碼不是多態的。 實施例: Class A(){ int a; int getA(){return a;}; } Class B(): A(){ int b; int getB(){return b;}; } 在另一類我們試圖從A目的是向下轉換到一個B對象: A *a; B *b = dynamic_c

    0熱度

    2回答

    當我取消註釋信號插槽所需的Q_OBJECT宏時,我得到了一個未定義的引用vtable for MyApp錯誤,但沒有宏編譯完美,但我不能使用信號沒有它的插槽。我想我可能會做一些愚蠢的錯誤,但請嘗試幫助,因爲我實在找不到問題。 O和我知道我的代碼是不整潔的,我正在努力。 myapp.h: #ifndef MYAPP_H #define MYAPP_H #include <QApplicatio

    0熱度

    3回答

    我正在編譯器設計上的任務。在代碼生成部分,我堅持如何創建指令,以確保在運行時調用適當的方法。該語言是C++的一個非常小的子集。 讓我們說: void main() { Animal* a; a = new Cow; //what code should be generated to ensure that object 'a' calls Cow::Init he

    2熱度

    1回答

    即使碰巧是子對象,我也需要獲得完整對象的最前面的地址。 我的實驗性智能指針的當前版本只能比較完整對象和它的一個子對象的位置。它只是以字節爲單位存儲它們的地址和大小,並查看它們是否重疊。問題在於在多重繼承的情況下比較完整對象的兩個子對象。由於這些子對象不會相互重疊,因此不會被識別爲屬於同一個對象。這需要偏移子對象中完整對象的「頭部」以獲取完整對象的地址以供比較。 請注意,此比較與訪問或破壞對象無關。