[Boolan]第二周学习笔记——rico风
来源:互联网 发布:淘宝五张宝贝主图规律 编辑:程序博客网 时间:2024/05/29 11:43
1.三大函数:拷贝构造、拷贝复制、析构
Class with point members:
String
拷贝构造函数,拷贝赋值函数
classString
{
{
public:
String(constchar* cstr=0); //默认构造函数
String(constString& str); //拷贝构造函数(接受类的类型)
String&operator=(constString& str);//拷贝赋值函数(右边为类的类型)
~String(); //析构函数
char* get_c_str()const{ return m_data; }
private:
char* m_data;
private:
char* m_data;
};
BigThree:拷贝构造函数,拷贝赋值函数,析构函数
两种字符串设计法:1.前面有字符串长度 2.后面有结束符’\0’(C/C++)
inline String::String(const char* cstr=0){
if(cstr){
m_data = new char[strlen(cstr)+1];
strcpy(m_data,cstr);
}
else{
m_data = new char[1];
*m_data = ‘\0’;
}
}
inline
String::~String(){
delete[] m_data;
}
class with pointer members 必须有copy ctor和copy op=
浅拷贝:按位复制
深拷贝:内存复制
拷贝构造函数:
inline
String::String(const String& str){
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
拷贝赋值函数:
(自我赋值检查)
1.先删除之前空间
2.重新分配空间
3.复制数据
inline
String& String::operator=(const String& str){
if(this==&str) //赋值自我检测 e.g. a = a;
return *this;
delete[] m_data;
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
return *this;
}
2.堆、栈与内存管理
栈(Stack):是存在于某作用域(scope)的一块内存空间(Memory Space)。在调用函数时,会形成stack来放置其接收参数、返回地址。
函数内所有变量使用上述stack里的变量。
堆(Heap):或System Heap,是操作系统提供的一块global的内存空间,程序可动态分配(dynamic allocated)从其中获得若干区块(blocks)。
objects生命期:
stack object 生命期:离开作用域被自动清理,析构函数呗自动调用,又叫auto object。
static local objects 生命期:在作用域结束后仍然存在,直到整个程序结束。
global object 生命期:其生命在整个程序结束后才结束,也可以视为static object。
heap object生命期:生命在被delete时结束,对此类对象,需要注意内存泄漏(memory leak)。
new:先分配memory,再调用ctor。
1.分配内存
2.转型
3.构造函数
delete:先调用dtor,再释放memory。
1.析构函数
2.释放内存 -> 内部调用free(ps)
动态内存分配所得的内存块(memory space):
在给object分配对象时,会加上上下cookie表示分配空间大小。
array内部会有counter。
array new需要搭配array delete:
e.g.
String* p = new String[3];
...
delete[] p; //调用3次dtor
---------------
delete p; //调用1次dtor,另外两个对象空间不会被释放。
不带指针的类对象不受影响但是习惯不好。
0 0
- [Boolan]第二周学习笔记——rico风
- [Boolan]第一周学习笔记——rico风
- [Boolan] C++第二周学习笔记
- Boolan 第二周笔记
- Boolan IOS第二周笔记
- boolan——c++学习笔记1
- C++面向对象第二周笔记<Boolan>
- Boolan* C++课程第二周笔记
- Boolan C++设计模式 第二周笔记
- boolan——c++学习笔记之内存分配
- boolan——c++学习笔记之类关系
- boolan——c++学习笔记之多态对象模型
- boolan——c++学习笔记之c++转换函数
- boolan——c++学习笔记之pointer-like classes
- boolan——c++学习笔记之STL简介
- boolan——c++学习笔记之容器
- boolan——c++学习笔记之容器探索
- boolan——c++学习笔记之STL哈希表探究
- 学习SQLite基础笔记
- Android权限Uri.parse的几种用法
- 深入研究容器
- 设计模式字典
- CF55D:Beautiful numbers(数位dp + 数论)
- [Boolan]第二周学习笔记——rico风
- 数据抓取学习(爬虫via scrapy)
- java多线程之继承Thread类创建线程类
- <algorithm>:next_permutation() HDU - 1027
- 数据结构学习四:树
- 蓝桥杯 2015 省赛 8 饮料换购
- 杭电1406 完数 java
- 我遇到过的 iOS 面试题(Object-C)
- Linux常用操作-1