感冒了,先这样交着吧,后面再改
三大函数:拷贝构造,拷贝复制,析构
有指针的类设计:
s1 = s2
带指针的类进行复制时,需要清空原有分配的内存,再设置新的内容。
删除空间,重新分配空间,重新赋值:
Stack栈,是存在与某种作用于(Scope)的一块内存空间(memoryspace)。例如当调用函数时,函数会形成一个Stack用来存放所接受的参数,以及返回地址。
这样写,Complex的析构函数会自动被调用起来。
c2是静态对象,其声明在作用域结束后仍然存在,直到整个程序结束。
c3是全局对象,生命在整个程序结束后才结束,也可以视为一种static object,其作用域是整个程序。
Heap堆,是由操作系统提供的一块global内存空间,程序可动态分配(dynamicallocated),从中获得若干区块(blocks)。
调试模式,new complex时的内存分配,与,发布模式时的内存分配。
分配的空间都是16的倍数,不足补充pad。
cookie指的是空间大小,最低位为1表示给出去,0表示收回来。
new []与delete[]要成对使用:
static静态:
对于类内部构成来说,可以进行如下分类:
声明3个complex c1, c2, c3,此时:
非静态成员非静态成员变量是独立的三份数据,占用三份独立的内存空间。
static 成员三个对象只有一个static成员,内存中只有一份。
举例:100万个银行用于,某些属性不同,但是如利率的信息相同,利率就可以定义为static。
非静态函数三个对象的成员函数只有一份, 函数被调用时通过隐藏的this指针区分对象。
static 函数static函数没有this指针,无法得到this。所以不能访问非静态成员。通常用来存取static成员。
Singleton设计模式:
只有A自己能创建自己,保证A只有一份。只有在使用时才创建A。
强悍的cout:
cout就是一种ostream
类模板(模板类):
告诉编译器,目前T只是个符号。这样就行成了类模板或模板类。
在创建对象时告诉编译器T具体是什么,然后查找替换。
函数模板(functiontemplate):
类的模板使用时需要明确指出具体的类型,函数模板无需这样。因为编译器会做参数推导(argument deduction)处理。
标准库中常用函数模板。
命名空间namespace:
直接使用:“using namespace std;”,将std的包装全部打开,这样cin、cout等等全部内容可以直接使用。
单个打开:“using std::out;”,只打开cout,使用cin还需要“std::cin”。