Abstract
最近在看侯捷C++面向对象高级开发(上)。讲的非常好。感兴趣的小伙伴可以去看看。
在课程中:侯捷老师讲了基础的C++ with class。这里我把与内存有关的知识点记录下了。(因为我感觉挺有意思的)。
Class in memory
侯捷老师说:OOP中有一个特性是数据封装。Class把数据封装了起来,并创建了相应的函数来操作数据。在C++里,Class创造出来的实例里:数据有多分,函数只有一份。
其实这也就是我们期望的。
new and delete
如下图:
为此:我在Visual Studio上得到了验证:
正如上图看见的:new 的确是先operator new,再执行构造函数。但是delete我却没有发现。其中我百度了scalar deleting destructor
scalar deleting destructor代表对象的析构函数代理;对应的delete A;
'vector deleting destructor'代表对象数组的析构函数代理; 对应的delete [] A;
我功力不够,没有完成验证成功。(ノへ ̄、).也许G++和GDB可以验证成功
delete 和 delete[]
正如上图所示:这就是delete和delete[]的区别所在了。验证过程很简单,就是在析构函数里cout<<“this is destructor”;就能验证成功了。
static in class
static in class 可以修饰 数据成员,也可以修饰函数成员。
如果是 static data member:
那么这个数据在所有由类创造的实例里:只有一份。
且像下面这样初始化并赋值(不知道初始化和赋值这样讲是不是对的,大概就是这个意思)
class foo{
static int c;
}
static int c=0;
如果是static member function:
其他成员函数的参数都会带this,这个不带。为什么又static member function呢?用来处理static data member的。
调用static函数的方式:
① object调用
② 用过class name调用
reference:
①:侯捷C++面向对象高级开发(上)
②:‘scalar deleting destructor’ 和 'vector deleting destructor’的区别