您的位置:首页 > 编程语言 > C语言/C++

关于 C++空类时编译器自动生成函数 总结

2013-04-15 22:09 246 查看
内容整理自网络!

C++的一个类中,如果没有声明下列函数,编译器会声明它自己的版本。且这些函数都是公有的。
具体编译器的做法是:只有你需要用到这些函数并且你又没有显示的声明这些函数的时候,编译器才会贴心的自动声明相应的函数。
这些函数是:一个无参缺省构造函数,一个拷贝构造函数,一个析构函数,一个赋值操作符,一个取址运算符。
无参缺省构造函数、析构函数: do nothing
取地址运算符: 只是返回对象的地址。
拷贝构造函数、赋值操作符: 对类的非静态数据成员进行“以成员为单位的”逐一拷贝。所以,定义一个重载的拷贝构造函数、赋值操作符来实现深度复制。

下面是编译器的参考实现:
Empty(); // 默认构造函数
Empty(const Empty &); // 默认拷贝构造函数
~Empty(); // 默认析构函数
Empty& operator=(const Empty &); // 赋值运算符
Empty* operator&(); // 取值运算符
const Empty* operator&() const; // 取值运算符 const

inline Empty::Empty() {}
inline Empty::~Empty() {}
inline Empty* Empty::operator&() { return this; }
inline const Empty* Empty::operator&() const { return this; }
拷贝构造函数、赋值操作符: 对类的非静态数据成员进行“以成员为单位的”逐一拷贝。

attention:
派生类的构造函数应在其初始化表里调用基类的构造函数。
基类与派生类的析构函数应该为虚(即加virtual关键字)。
编写派生类的赋值构造函数时,注意不要忘记对基类的数据成员重新赋值。

禁用编译器自动生成的函数的方法:参考/article/5417352.html

1. 定义为private且不实现它

2. 继承Uncopyable类

3.C++0x中的新方法,在C++0x中,新添加了两个关键字:default和delete

SpecialClass(const SpecialClass&) = default;

SpecialClass& operator=(const SpecialClass&) = delete;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐