2011-11-14 38 views
6

Tôi có một con trỏ Base* base_ptr cho một đối tượng đa hình. Có thể tìm ra kích thước của loại động của đối tượng đã nói không?Tìm hiểu kích thước của một đối tượng đa hình

AFAIK, sizeof(*base_ptr) yilds kích thước của loại tĩnh là base_ptr. Tôi bắt đầu nghi ngờ điều này là không thể, nhưng có lẽ tôi đang nhìn cái gì đó.

Lưu ý: Tôi biết rằng tôi có thể thêm chức năng ảo vào cấu trúc phân cấp loại của tôi, nó trả về kích thước, nhưng đây không phải là giải pháp mong muốn trong trường hợp của tôi.

EDIT: sizeof(base_ptr) ->sizeof(*base_ptr)

+0

'sizeof (base_ptr) 'mang đến cho bạn kích thước của con trỏ, không phải của bất kỳ lớp nào. –

+0

Dường như ngay cả g ++ - cụ thể không cung cấp thông tin này. – aschepler

Trả lời

11

Không, bạn không thể làm điều đó trong C++ - ít nhất là trong một cách cầm tay. Đặt cược tốt nhất sẽ là có getSize() chức năng thành viên được thực hiện trong mỗi lớp.

5

Có. Bạn có thể thực hiện một chức năng ảo trong lớp cơ sở mà trả về kích thước:

class Base 
{ 
    virtual int size() { return sizeof(Base); } 
}; 
class Derived : public Base 
{ 
    virtual int size() { return sizeof(Derived); } 
}; 

//...... 
Base* b = new Derived; 
int size = b->size(); //will call Derived::size() and return correct size 
Các vấn đề liên quan