zhs_shz
作者zhs_shz·2013-06-27 16:25
工程师·深圳雁联

空结构体和空类

字数 730阅读 2693评论 0赞 0
空结构体
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

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

  • SQL学习
    评论 0 · 赞 0
  • 索引
    评论 0 · 赞 0
  • 代码优化--loop unrolling 更新版
    评论 0 · 赞 0
  • 联席会议
    评论 0 · 赞 0
  • 操作符与库函数
    评论 0 · 赞 0
  • X社区推广