空结构体
struct structname
{
};
typedef struct structname
{
}structalais;
空类
class classname
{
};
视编译器而定(GCC和G++,可以使用不同的后缀名选择)
在C语言中,空结构体的大小是0,sizeof(structname)=0,其所有实例化的地址是一样的
在C++中,空结构体和空类的大小是1,sizeof(class/struct)=1,其实例化的地址是互不相同,唯一的
注意:不要理解成用一个字节大小来表示空类和空结构,而是分配一个字节的内存空间,
否则只能定义最多256个空类,那超过这个上限会怎么样?
类的实例化要求类在内存中独一无二
空类需要实例化,编译器为其分配一个字节以标识其唯一性
空结构体和空类的作用:占位,在代码未成形前,保证框架编译通过
空类的等价:
class Empty
{
Empty(); //默认构造函数
~Empty(); //默认析构函数
Empty(const Empty&); //默认拷贝构造函数
Empty& operator=const Empty&; //默认赋值运算符
Empty* operator&(); //默认取址运算符
const Empty* operator&() const; //默认取址运算符const
};
默认成员函数只有在使用的时候才产生
拷贝构造函数和赋值运算符的区别:
拷贝构造函数产生一个新对象,不需要检查源对象和新对象是否相同;
赋值运算符不产生一个新对象,需要检查新旧对象,并释放源对象分配的内存;
如果类有指针类型的成员,必须重写拷贝构造函数和赋值运算符,不能使用默认的
添加新评论0 条评论