是否有一種通用的方法(不依賴於平臺)在編譯時獲得內存中類對象的大小,而不計算vtable指針?確定沒有虛表指針的對象的大小
回答
正如你所要求的便攜方式:
class MyClass
{
private:
struct S
{
DataMemberType1 dataMember1;
...
DataMemberTypeN dataMemberN;
} m;
public:
static const size_t MemberSize = sizeof(S);
};
你確定這是100%的可移植性和'sizeof MyClass) - sizeof(S)'將始終與vpointer的大小完全相同? – 2015-02-10 14:45:55
@Neil:我的解決方案避免了實現的具體細節。簡要介紹一下「C++對象如何在內存中佈局?」 [鏈接](http://www.stroustrup.com/bs_faq2.html#layout-obj)。 – 2015-02-10 15:02:46
那不回答我的問題..如果有填充? – 2015-02-10 15:05:43
在這個class
上使用sizeof
,它不包括vtable
只是指針的大小。
我討論了vtable指針。編輯的問題。 – Reflection 2015-02-10 14:30:51
@PaulEvans對於任何具有虛函數的對象(任何實際包含虛表的對象),你的答案都是錯誤的。http://ideone.com/7y48aO – 2015-07-14 12:24:21
@JonathanMee答案是正確的;類實例包含一個vptr(vtable指針的簡寫)** not **一個vtable(類的虛函數的函數指針表+ RTTI info +虛擬基地偏移量) – curiousguy 2015-08-01 00:52:04
- 1. 有沒有指針和明確的對象大小管理,但顯式對象刪除的語言?
- 2. 指針的大小沒有提到
- 3. 指針大小不正確
- 4. 選擇沒有指針的對象
- 5. 正確的指針,虛函數表
- 6. 對象B和對象B對象的引用沒有指針
- 7. 純虛擬對象是否有指向vtbl的指針?
- 8. 指針的大小
- 9. 虛擬函數表指針的大小是多少?
- 10. 如何確定C#對象的大小
- 11. C#數組沒有指定的大小
- 12. 使按鈕寬度沒有指定確切的大小?
- 13. 具有'this'指針的類的大小
- 14. 指針的大小,指向C中指針的指針
- 15. 有沒有辦法確定java中有多大的對象?
- 16. 虛擬功能表指針在對象中的位置
- 17. Foo類包含對象Bar,Foo表沒有指向Bar對象的指針,Bar對象有FK到Foo。
- 18. 創建指向沒有新關鍵字的對象的指針
- 19. 特定位大小的C++指針
- 20. 指向現有對象的指針?
- 21. 使用constexpr來確定數組指針的大小
- 22. 多繼承:虛擬指針的類的大小?
- 23. 指針向量的大小
- 24. C中指針的大小
- 25. 2d指針的大小
- 26. 查找指針的大小
- 27. 在sizeof()方法中沒有提供正確大小的結構指針
- 28. 虛擬類的每個對象都有一個指向vtable的指針嗎?
- 29. 對象/對象的大小寫約定
- 30. 如何確定我是否有指向釋放對象的指針?
出了什麼問題'sizeof'?它不包括vtable的大小,只包含指向vtable的指針的大小(如果有的話)。 – dasblinkenlight 2015-02-10 14:23:55
減法?如果有多個呢? – Reflection 2015-02-10 14:29:20
出於好奇:爲了什麼? – Angew 2015-02-10 14:43:45