Thinking in C++ ----第11章 引用和拷贝构造函数
2011-12-20 11:29
197 查看
一、引用(reference)
引用的规则1. 当引用被创建时它必须被初始化。
2. 一旦一个引用被初始化为一个对象,它就不能改变为另一个对象的引用。
3. 不能有NULL引用。必须确保引用和一块合法的存储单元关联。
怎样选择引用和指针
在下面两种情况下应使用指针:
1. 存在不指向任何对象的可能,这种情况下你可能将指针设置为NULL;
2. 你需要在不同的时刻指向不同的对象。
反之,如果总是指向一个对象,并且一旦指向一个对象后就不会改变指向,这种情况下应该使用引用。
二、拷贝构造函数
什么时候需要拷贝构造函数仅当需要按值传递的方式传递一个类对象时,我们才需要拷贝构造函数。
什么时候需要自定义的拷贝构造函数
1. 当拷贝构造函数除了拷贝外,还要做一些额外的事情时,需要自定义;
2. 当类中包含指针成员时,需要自定义。因为默认的拷贝构造函数只拷贝指针,是浅拷贝。
默认的拷贝构造函数是什么样的
编译器递归地为所有基类和所有的成员对象调用拷贝构造函数。可以写一段代码验证一下:
1 #include <iostream>
2 using namespace std;
3
4 class Super{
5 public:
6 Super(){}
7 Super(const Super &super){
8 cout << "Super Copy Constructor.\n";
9 }
};
class Inner{
public:
Inner(){}
Inner(const Inner &inner){
cout << "Inner Copy Constructor.\n";
}
};
class Sub : public Super{
private:
Inner in;
};
int main(){
Sub sub1;
Sub sub2 = sub1;
}
输出结果如下:
Super Copy Constructor.
Inner Copy Constructor.
实现自己的拷贝构造函数
当你由于某种原因需要实现自己的拷贝构造函数时,需要记住拷贝类中的某一部分。具体如下:
1. 调用基类的拷贝构造函数。如果你不这样做,编译器会偷偷地调用基类的默认构造函数,而不是拷贝构造函数。
2. 调用成员的拷贝构造函数。如果你不这样做,编译器会调用成员的默认构造函数,而不是拷贝构造函数。
3. 对指针成员进行深拷贝。
以后要看的
1. 在汇编的层次上理解函数调用栈及其调用过程。相关文章推荐
- 读书笔记-Thinking in C++-第11章 引用和拷贝构造函数
- 【ThinkingInC++】56、函数中的引用
- 读书笔记--《Thinking in C++》---C/C++指针的重要区别和引用
- 【ThinkingInC++】63、引用计数
- Thinking in C++ ----第12章 运算符重载
- 怎样理解“Thinking in C++”?
- Thinking in C++ chapter 1
- Thinking in java 创建一个类,它包含一个未初始化的string引用。验证该引用被初始化成了null
- 1026 notes for thinking in c++(127-137)
- 【ThinkingInC++】52、函数内部的静态变量
- 【ThinkingInC++】75、多重继承
- Thinking in C++ (1-1)
- 【C++】C++中拷贝构造函数的参数类型必须是引用
- Thinking in C++: Pointers to members 指向成员的指针
- Thinking in C++: Pointers to members 指向成员的指针
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
- Thinking in C++ 阅读笔记(第三章)
- STL Containers & Iterators part1(Chapter 4 of Thinking in C++ Vol 2)
- 【ThinkingInC++】52、函数内部的静态变量
- thinking in C++ 读书日志(六)