1,拷贝构造函数
String s3(s1); // 以s1为蓝本设定到s3上
2,拷贝赋值this
s3 = s2;
3,若是没有自定义拷贝构造和拷贝赋值,编译器会自动生成,可是默认的拷贝构造和拷贝赋值只会很忠实的一个bit一个bit的拷贝过去,对于复数够用;可是对于带有指针的则不是很好,由于对于指针赋值,是两个指针指到同一个地方,而不是真正的拷贝,这个是浅拷贝,并且容易引发内存泄漏
4,只要类中有定义指针,必定要写拷贝构造和拷贝赋值函数
5,析构函数
当离开做用域的时候,析构函数会被自动调用
若是没有这个析构函数,动态分配的内存就会形成内存泄漏了
6,字符串两种表示方法
1,有长度和字符两个信息
2,在字符的结尾有一个'\0'结尾
7,strlen计算的值不包含结束符
8,以下两种方式都调用了拷贝构造函数,行为一毛同样spa
String s2(s1); String s2 = s1; 而“String s2; s2 = s1;”调用的是拷贝赋值函数
9,检测自我赋值----效率高,不单单效率高,若是不这样,还可能会出错操作系统
if(this == &str) return *this;
10,stack(栈)
是存在于某做用域(scope)的一块内存空间。例如当调用函数,函数自己即会造成一个stack用来放置它所接收的参数,以及返回地址。
在函数本体内声明的任何变量,其所使用的内存块都取自上述stack。
11,heap(堆)
是由操做系统提供的一块global内存空间,程序可动态分配从其中得到若干区块
12,array new 必定要搭配 array delete
13,static
1,class里的static数据只有一份,银行户头,利率对于全部人都同样
2,class里的static函数没有this,只能处理静态数据
3,静态数据须要在外部定义
4,静态函数能够经过object调用和经过class调用
14,把ctors放在private区
静态数据只有一份
静态函数被class调用
返回对象调用setup函数
Singleton指针
class A
{
public: static A& getInstance( return a; ); setup() { ... } private: A(); A(const A& rhs); static A a; ...
};
调用方式:A::getInstance().setup();code
Meyers Singleton class A { public: static A& getInstance(); setup() { ... } private: A(); A(const A& rhs); ... }; A& A::getInstance() { static A a; return a; }
调用方式:A::getInstance().setup();
15,类模板会形成代码的膨胀
16,函数模板---类模板中的关键字typename和函数模板中的class是相通的,都同样对象
template <class T> inline const T& min(const T& a, const T& b) { return b < a ? b :a; }
17,namespace
防止重名blog
namespace std { ... }