一、拷贝构造, 拷贝赋值, 析构
Class 带指针 , 必须有拷贝构造和拷贝赋值函数
1) 拷贝构造函数:
浅拷贝:只拷贝指针
深拷贝:创建空间并将数据拷贝过去, 拷贝指针及相关内容
拷贝赋值及处理过程
1) 检查是否自我赋值;
2) 删掉本身的空间;
3)重新创建空间;
4)进行拷贝;
2) 析构函数:
实现一些清理工作
二、 堆栈内存管理
1) 栈和堆的区别:
栈离开作用域 scope 后死亡, 而堆不会。
2) 常用关键字:
static / global 声明周期
new: 先申请内存, 再调用构造函数
delete: 先调用析构函数, 再释放内存
VS编译器 : 使用new delete 会增加一个 cookie 结构用于存放申请内存的大小及目前的状态, 是申请还是释放
delete[] 告诉编译器数组对象需要要对所有的对象进行析构, 针对包含指针的类会造成内存泄漏
三 扩展:
1) static:
static函数没有this指针, 可以处理static 数据,
static变量要在类外面进行定义, 在类里面是声明
调用静态函数的方法
(1) 通过object 调用
(2) 通过class name 调用
2) 单件的创建:
(1)构造函数放到private, 可以使得外界无法创建该类对象;
(2)通过静态函数创建并获取唯一的数据;
3) cout, ostream
对操作符<<重载, 可以输出多种类型
4) 其他
类模板, 函数模板
namespace
operator type() const;
explicit complex();
pointer-like object
function-like object
namespace
template specialization
stardard library
variadic template (C++11)
move ctor (C++11)
Rvalue reference (C++11)
auto(C+11)
lambda(C++11)
range-base for loop(C++11)
unordered containers(C++11)
习题编译报错:
1. rectangle.h:61:51: error: ‘Rectangle& operator=(const Rectangle&)’ must be a nonstatic member function
inline Rectangle& operator=(const Rectangle& other) {
没有类的定义 改为 Rectangle& Rectangle;:operator=(const Rectangle&) 通过
网友评论