GeekBand C++面向对象高级编程(上)笔记2

在一个类中必定含有构造函数,析构函数,拷贝构造函数,以及拷贝赋值函数。

接下来先谈下编写这四个函数需要注意的地方

ctor(构造函数)和dtor(析构函数)

1)构造函数传入指针时,如果有初值,new char[strlen(cstr) + 1];strcpy(m_data, cstr);

如果没有初值,new char[1]; *m_data = '\0';//存放结束符

2)析构函数,new什么,就delete什么。

copy ctor(拷贝构造函数)

1)new char[strlen(cstr) + 1];strcpy(m_data, cstr);来源端和目的端都是本类

copy assignment operator(拷贝赋值函数)

1)先清理目的端,才能赋值

2)需要判断是不是自我赋值

if(this == &str) return *this;

Typename&--表示引用

&object--表示取地址


接下来谈一谈C++的内存管理

内存泄漏几乎在每个C++程序中都会发生,所以内存管理是学习C++ 的必经之路。

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

全局/静态存储区:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

如果想要更详细的了解C++的内存管理,请参阅《C++内存管理详解》。

并且在现代C++编程中,智能指针给我们在资源管理上带来了很多好处。

在工作中,我们常常会用智能指针来管理资源,其中最常用的就是引用计数类智能指针了(shared_ptr)。

资源共享型的智能指针有两种实现,一种是侵入式,一种是非侵入式。

如果希望详细了解C++的智能指针,请参阅《C++引用计数计数及智能指针的简单实现》

你可能感兴趣的:(GeekBand C++面向对象高级编程(上)笔记2)