传统指针存在一些问题:
需要手动管理内存、容易发生内存泄漏(忘记释放、出现异常等 释放之后产生野指针
智能指针就是为了解决传统智能指针存在的问题
auto_ptr
存在缺陷,现在已经被弃用
share_ptr//智能指针p是在栈空间 //auto_ptr 不能用于数组,此处有异常 SmartPointerp(new Person[10]); p->run();
shared_ptr智能指针的自实现p(new Person[10]);
//智能指针的自实现 #includeusing namespace std; class Person { private: int m_age; public: Person(int age):m_age(age) { cout << "Person(int):" << m_age << endl; } void run() { cout << "run():" << m_age << endl; } ~Person() { cout << "~Person()" << endl; } }; template class SmartPointer { private: T* m_obj; public: SmartPointer(T* obj) :m_obj(obj) {} ~SmartPointer() { //保证了在SmartPointer销毁的时候指向的内存空间也能释放 if (m_obj == nullptr) return; delete m_obj; } //重载运算符,让智能指针对象p可以调用Person的run函数 T* operator->() { return m_obj; } }; int main() { { //智能指针p是在栈空间 SmartPointer p(new Person(20)); p->run(); } return 0; }
思考下面的代码有没有问题:
分析:出现二次析构!



