智能指针
内存泄露(臭名昭著的BUG) 动态申请堆空间,用完后不归还 C++语言中没有垃圾回收机制 指针无法控制所指堆空间的生命周期 我们需要什么? 需要一个特殊的指针 指针生命周期结束时主动释放堆空间 一片堆空间最多只能由一个指针标识 杜绝指针运算和指针比较(可以避免野指针) 解决方法 指针操作符(->和*) 只能通过类的成员函数重载 重载函数不能使用参数 只能定义一个重载函数 小结: 指针操作符(->和*)可以被重载 重载操作符能够使用对象代替指针 智能指针只能用于指向堆空间的内存 智能指针的意义在于最大程度的避免内存问题 智能指针使用军规:只能用来指向堆空间中的对象或者变量 #include <iostream> #include <string> using namespace std; class Test { int i; public: Test(int _val) { this->i = _val; cout << "Test(int _val)" << endl; } ~Test() { cout << "~Test()" << endl; } int get_value() { return i; } }; class Pointer { Test* mp; public: Pointer(Test *p = NULL) { mp = p; } //执行深拷贝