//C++悄悄做的事有Big Three:
//一个或多个构造函数
//一个析构函数
//一个拷贝赋值运算符
class Empty{};
class Empty {
public:
Empty();
Empty(const Empty&)
~Empty();
Empty& operator=(const Empty& rhs);
};
需要注意的是,编译器版本的拷贝构造函数和拷贝赋值运算符只是简单地将原对象的每一个Non-static数据成员拷贝到目标对象中了,简单粗暴。
//C++ only
class A
{
public:
A() = default;
A(const A&) = delete;
virtual ~A() = default;
A& operator=(const A&) = delete;
};
空类大小不为0
原因:从类的实例化说起,所谓类的实例化就是指在内存中划分出一块区域分配给一个具体的对象,每个实例在内存中都会被赋予一个独一无二的地址。为了便于空类在实例化后能在内存中得到一个独一无二的地址,空类的大小也就由0变为1了。