0%

了解C++默认编写并调用了哪些函数

在class中,如果你自己没声明,编译器会为一个类自动声明(编译器版本的)一个默认构造函数,一个copy构造(拷贝构造)函数和一个copy assignment(拷贝赋值)操作符函数,这些函数都是public且inline的。但是只有当这些函数被调用了,它们才会被编译器创建出来。另外编译器还会提供一个默认的析构函数,这个析构函数是non-virtual的,除非这个class的base class自身声明有virtual 析构函数。

对于编译器提供的copy构造函数和copy assignment操作符函数,都只是单纯地将来源对象的每个non-static成员变量进行浅拷贝到目标对象。

某些情况下即使你自己未声明copy assignment操作符函数,编译器也会拒绝提供

  • class内含reference成员
  • class内含const成员
  • Base class将copy assignment操作符声明未private,编译器将拒绝为其derived class生成一个copy assignment操作符