Class with pointer members(必须有copy ctor + copy op)
定义了Rectangle类;
ctor(构造函数)
Rectangle(int width, int height, int x, int y);
dtor(析构函数):
~Rectangle();
不带指针的Class可以不必写析构函数,带指针的Class有必要写析构函数,操作结束后必须释放内存防止内存泄漏。
拷贝构造函数:
Rectangle(const Rectangle& other);
引用构造过的Rectangle对象。
浅拷贝和深拷贝:
我的理解是:浅拷贝打个比方就好像给一个存在的对象取了一个别名,其实新建了一个指针指向同一个元素,操作中会很危险,比如释放掉原指针指向的对象那么浅拷贝创建的指针就会指向一个不存在的对象会出错。
而深拷贝则是申请了一块相同大小的内存空间,并将原对象值依次赋给新对象。
拷贝赋值函数:
Rectangle::operator = (const Rectangle& other);
if(this == &str)//检测自我赋值
return *this;
规范的写法最好要检测自我赋值,避免可能出现的错误。
delete width;
width = new int(*other.width);
函数中应该先释放掉原对象,重新给原对象分配和即将赋值对象的内存大小。
stack objects
生命周期较长,直到整个程序结束才会消亡,不会随着对象的消亡而消亡,有点类似全局对象。
heap bojects
在作用域之外生命期就结束了。
global objects
生命在整个程序结束之后才结束。
new 和 delete两种操作有点相反:
new先分配mempry然后转型再调用ctor,而delete先调用dtor再释放memory。
array new 一定要搭配 array delete 执行多次ctor同时也要执行多次dtor,否则也会造成内存泄漏。
调用static函数:
可以用过object调用,也可以通过Class name调用
感悟:
这周老师讲的某些内容很有趣;
比如数据在内存中的分配,cookie和debug单元,不满16位会填充一些东西进去。
不过我也没有很好的拓展,也不清楚拓展路径.....不过笔记要努力越写越好
网友评论