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

内容整理自网络!

 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关键字)。
 编写派生类的赋值构造函数时,注意不要忘记对基类的数据成员重新赋值。

 

禁用编译器自动生成的函数的方法:参考http://www.cnblogs.com/xiaoxinxd/archive/2013/01/11/effective_cpp_06.html

1. 定义为private且不实现它

2. 继承Uncopyable类

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

SpecialClass(const SpecialClass&) = default;
SpecialClass& operator=(const SpecialClass&) = delete; 

原文链接: https://www.cnblogs.com/ant-wjf/archive/2013/04/15/3023062.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/84720

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午9:42
下一篇 2023年2月9日 下午9:42

相关推荐