字符串类的例子,是侯老师自己写的,因为标准库的例子功能太复杂了。
编译器提供的拷贝赋值只是拷贝了对象的指针,没有真正拷贝对象。
1. 拷贝构造函数和拷贝赋值函数
2. 3个特殊函数
只要类里面带有指向某个数据类型的指针,一定需要写拷贝构造函数和拷贝赋值函数。3个特殊函数(Big three):
- 拷贝构造函数
- 拷贝赋值函数
- 析构函数
3. 构造函数和析构函数
- new就是要分配一块内存。
- 如果类里面含有指针,多半需要用new动态分配内存。
- 动态内存别忘记用delete 指针变量的形式释放掉,在new所在那一行离开作用域之前。
- 构造函数所占用的内存不是动态分配的,在离开它们所在的作用域的时候,析构函数自动被调用。
- 在为字符串分配内存的时候,都要多分配一个字节,用来存放结束符' '
string.h
#pragma once class String { public: String(const char* cstr=0); String(const String& str = 0); String& operator=(const String& str); ~String(); char* get_cstr() const { return m_data} private: char* m_data; }; inline String::String(const char* cstr=0) { if (cstr) { m_data = new char[strlen(cstr) + 1]; strcpy(m_data, cstr); } else { m_data = new char[1]; *m_data = '