Dear All,
A class having no member variables and only a method sizeof(object)
will return 1byte in ANSI and two bytes in Unicode.
I have the answer for this of how in works in ANSI. But I don't
know it returns two bytes in UniCode.
Please help...
For ANSI:
In ISO/ANSI C++ Standard, 5.3.3 § 1, it stays: "The sizeof operator
yields the number of bytes in the object representation of its
operand.(...)
the result of sizeof applied to any other fundamental type
(_basic.fundamental_) is implementation-defined."
[Note: in particular, sizeof(bool) and sizeof(wchar_t) are
implementation-defined. ..."sizeof(bool) is not required to be 1."
The value of sizeof(bool) can be anything between 1 and N, where N is
positive integer number (I suppose 0 is not a reasonable value). One
can
read this as "size of bool type can not be smaller than size of char
type, as sizeof(char) is guaranteed to be 1"]
A class having no member variables and only a method sizeof(object)
will return 1byte.
Reason:
The basic issue is addressability. So, as long as memory's smallest
unit is char (sizeof(char)==1 by definition); no addressable object
can use less storage, even if it only uses up a single bit. Member
functions don't add to the sizeof a class.
All objects must have sizeof of at least one. This is so that you can
form a pointer to an empty object that is distinct from a pointer to
another empty object.
Examples:
Suppose sizeof(char )==1 // always true
Suppose sizeof(int )==4
Suppose sizeof(void*)==4 // possibly size of virtual pointer
For a class with virtual function, size of a virtual function is a
size of pointer to function.
the common implementation has only one virtual pointer in each object.
This virtual pointer points to a virtual table. There is one virtual
table for the whole class. Think of the virtual table as static data.
The virtual table has N entries if there are N virtual funcs. Eg,
struct Thing
{
virtual ~Thing();
virtual void f() const;
void g();
virtual void h() const;
int i;
};
Assuming sizeof(int)==4 and sizeof(any pointer)==4, then
sizeof(Thing)==sizeof(Thing::vptr)+sizeof(Thing::i )==8.
But there is a virtual table containing 3 entries. The compiler
generates this table internally. A class has a virtual table only if
it has a virtual function. For nonvirtual functions, an object doesn't
have to keep reference to it. I think they're just a piece of code
that compiler resolve at compile time.
Thanks & Regards
Sunil