理解C++默默编写并调用哪些函数
2015-04-18 20:20
253 查看
1.如果你定义一个空类,C++会自动为你生成默认构造函数,析构函数,复制构造函数,赋值操作符(operator=)
class Empty{};
<==>
2.在类中,只要没有自己声明析构函数,复制构造函数,赋值操作符(operator=),C++都会自动为你生成
如果你没有自己声明任何构造函数,编译器也会为你定义一个默认构造函数
3.C++自动为你生成的
析构函数 ==》 调用每个类成员的析构函数
复制构造函数 ==》 调用每个类成员的复制构造函数
赋值操作符 ==》 调用每个类成员的赋值操作符
4.复制构造函数
如果你这样定义复制构造函数:
那么在调用复制构造函数产生A类型对象的时候,实际上是针对每个类成员调用类成员的默认构造函数
如果你这样写:
那实际上调用的是每个类成员的复制构造函数
class Empty{};
<==>
class Empty { Empty() { ... } Empty(const Empty& rhs) { ... } ~Empty() { ... } Empty& operator=(const Empty& rhs) { ... } };
2.在类中,只要没有自己声明析构函数,复制构造函数,赋值操作符(operator=),C++都会自动为你生成
如果你没有自己声明任何构造函数,编译器也会为你定义一个默认构造函数
3.C++自动为你生成的
析构函数 ==》 调用每个类成员的析构函数
复制构造函数 ==》 调用每个类成员的复制构造函数
赋值操作符 ==》 调用每个类成员的赋值操作符
4.复制构造函数
class A { public: A() { ... } A(const A& rhs); ~A() { ... } A& operator=(const A& rhs) { ... } private: Type1 m_1; Type2 m_2; ... };
如果你这样定义复制构造函数:
A::A(const A& rhs) { ... }
那么在调用复制构造函数产生A类型对象的时候,实际上是针对每个类成员调用类成员的默认构造函数
如果你这样写:
A::A(const A& rhs) : m_1(rhs.m_1), m_2(rhs.m_2) ... { ... }
那实际上调用的是每个类成员的复制构造函数
相关文章推荐
- 关于C++——理解C++默默编写并调用了哪些函数&&函数初始化式(初始化列表相关)
- effective c++:了解c++默默编写并调用了哪些函数
- 《Effective C++读书笔记》--条款05:了解C++默默编写并调用哪些函数
- Effective C++ Item 05-了解C++默默编写并调用哪些函数
- Effective C++ Item 5 了解 C++ 默默编写并调用哪些函数
- 条款05:了解C++默默编写并调用哪些函数
- Effective C++——》条款5:了解C++默默编写并调用哪些函数 .
- 条款05:了解C++默默编写并调用哪些函数
- 《Effect C++》学习------条款05:了解C++默默编写并调用哪些函数
- 条款05:了解C++默默编写并调用哪些函数
- 《Effective C++》item5:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls.)
- 条款5:了解C++默默编写并调用哪些函数
- Effective C++ 之 Item 5:了解C++默默编写并调用哪些函数
- 条款五 了解C++默默的编写并调用的哪些函数
- Effective C++笔记之五:了解C++默默编写并调用哪些函数
- 条款05:了解C++默默编写并调用哪些函数
- effect C++ 了解C++默默编写并调用哪些函数
- Effective c++学习笔记——条款5:了解C++默默编写并调用哪些函数
- Item2:Know what functions C++ silently writes and calls--了解C++默默编写并调用了哪些函数
- C++默默编写并调用了哪些函数