首页 > 代码库 > GeekBand第二周学习笔记

GeekBand第二周学习笔记

Copy Ctor(拷贝构造),copy assignment operator(拷贝赋值)

Copy Ctor(拷贝构造):默认的拷贝构造函数会将其引用类型的引用拷贝到新实例,若用指针指向两实例的同一引用类型则两指针的值是相同的即指向同一内存地址.

1 String::String(const String& str)
2 {
3     m_data=http://www.mamicode.com/new char[strlen(str.m_data)+1];
4     strcopy(m_data,str.m_data);
5 }

Copy assignment operator(拷贝赋值):赋值符号如不重载,类内的指针便会拷贝指针,两指针则会指向同一内存地址;

 1 String& String::operator = (const String& str)
 2 {
 3     if(this == &str)//为了防止释放自身指针
 4    {
 5         return *this;
 6    }
 7     delete[] m_data;
 8     m_data = http://www.mamicode.com/new char[strlen(str.data) + 1];
 9     strcpy(m_data, str.data);
10     return *this;
11 }   

 


Stack(栈),Heap(堆)

Stack(栈):栈为函数内部声明的局部变量提供了存储空间,他的生命在作用域结束之际结束,这些变量就是auto变量。进行函数调用的时候,栈存储与此有关的维护信息,这些性息就是过程活动记录,他包含函数调用的地址,还有一些不适合放到寄存器中的变量的值和寄存器值的保存,调用函数时起到保存现场的作用.

Heap(堆):堆是指由操作系统提供的一块全局内存空间,程序可以手动分配和释放。

(PS:内存泄露:手动分配的内存在进程结束前是不会被自动释放的,如不再使用需要手动释放其内存;)


Class Template(类模板),Function Template(函数模板)

Class Template(类模板):为满足类或函数仅接收不同类型的参数减少代码量及工作量而设计,并相比更易读.使用时在类前加上模板参数template<class 随意合法标识符,....>.

 

 1 template <class T, class Squence = deque<T> >
 2 class queue
 3 {
 4 //...
 5 protected:
 6     Squence c;  //底层容器
 7 public:
 8     //完全依赖于c的功能函数
 9     bool empty() const { return c.empty(); }
10     size_type size() const { return c.size(); }
11     reference front() { return c.front(); }
12     reference back() { return c.back(); }
13     //deque 是两头都能出,queue是先进先出(只有一个出口)
14     void push(const value_type& x) { c.push_back(x); }
15     void pop() { c.pop_front(); }
16 };

 

这是一个列队模板函数,若类函数在类外定义时需要在定义前加上模板参数

 1 template <class T, class Squence = deque<T> > void push(const value_type& x) {c.push_back(x);} 

 

Function Template(函数模板):使用与类函数模板在类外声明定义相同.


Inheritance(继承),Composition(复合),Delegation(委托)

 

Inheritance(继承):

Composition(复合):

Delegation(委托):

 

 

 

暂时为未完成版

GeekBand第二周学习笔记