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

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

2015-04-18 20:20 253 查看
1.如果你定义一个空类,C++会自动为你生成默认构造函数,析构函数,复制构造函数,赋值操作符(operator=)

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++