-
为什么要使用智能指针?
因为c++常规中new完之后需要手动delete,而java中就不用管,所以就希望能够有一种机制在new完之后自动给delete释放掉
A* p = new A; delete p;
-
怎么使用?
#include <iostream> #include <memory> using namespace std; class A { public: A() {cout << "A() constructor" << endl;} ~A() {cout << "~A() destructor" << endl;} void func() {cout << "adsdsdsa" << endl;} }; void foo() { auto_ptr<A> ptr(new A); //auto_ptr<A> 用A对模板实例化,实例化完就是一个具体的类,然后对对象ptr进行初始化 本质上重载 -> * ptr->func(); //ptr是对象,但具有指针的特点 (*ptr).func(); } int main() { foo(); return 0;}
-
是怎么实现的?
class Sp { public: Sp(A *p) :_p(p){} ~Sp(){delete _p;} A* operator->()//返回指针 {return _p;} A& operator*()//返回引用,若返回对象会发生两次析构 {return *_p;} private: A * _p; }; void foo() { Sp sp(new A);//把new A的指针赋给了p,p又给了_p,sp是栈上的对象,当其离开栈时要析构就会调用析构,从而调用delete //但此时的sp不能访问到_p(还是私有的),希望对其再次封装,像指针一样 sp->func();//sp.operator->()还是个指针,可以调用func,即sp.operator->()->func();根据a.operator+(b) <=> a+b可以把前面华为sp->->func,在一步合为sp->func //此时sp有了指针的功能,对象变指针 (*sp).func(); }
C++基础——智能指针
最新推荐文章于 2024-08-17 23:59:05 发布