笔记--Effective C++ 条款5:了解C++默默编写并调用了那些函数?

空类 != 空类

  • 默认构造函数(没有声明任何构造函数)
  • 拷贝构造函数
  • 拷贝操作构造函数符号 =

编译器自己产生的只是针对 non-static 成员进行简单的拷贝。

class APP
{
public:
    void set_x(int x);
private:
    int _x;
    friend std::ostream& operator<<(std::ostream& os, const APP& data);
};

int main()
{
    // 默认构造函数(编译器自动生成)
    APP a1;
    a1.set_x(1);
    std::cout << a1;
    
    // 默认拷贝构造函数(编译器自动生成)
    APP a2(a1);
    std::cout << a2;

    // 默认拷贝赋值操作(编译器自动生成)
    a1.set_x(2);
    APP a3 = a1;
    std::cout << a3;

    return 0;
}

编译器自动生成的构造函数,只是简单的值拷贝。假设成员中包含指针类的参数,那么也只是把指针指向地址拷贝过去。

posted @ 2020-09-16 17:25  卧听惊涛骇浪  阅读(45)  评论(0)    收藏  举报