c++智慧指標中的reset成員函式

lzn211發表於2020-10-18

若p為智慧指標物件(如:shared_ptr< int> p)
成員函式reset使用:

p.reset(q) //q為智慧指標要指向的新物件

會令智慧指標p中存放指標q,即p指向q的空間,而且會釋放原來的空間。(預設是delete)

實驗程式碼:

#include<memory>
#include<iostream>
using namespace std;
struct A {
	int i ;
	A() { cout << "construct\n"; }
	~A() { cout << "delete "<< i <<"\n"; }
};
int main()
{
	shared_ptr<A> a( new A);
	A* b = new A;
	a->i = 1;
	b->i = 2;
	a.reset(p);
	//此時輸出delete 1,代表智慧指標原來指向的空間被delete
	cout << "end";
	return 0;
}

其他reset使用:

p.reset(); //釋放p中內建的指標指向的空間
p.reset(q.d); //將p中內建指標換為q,並且用d來釋放p之前所指的空間

相關文章