reset是std::unique_ptr的一个成员函数,用于将std::unique_ptr重新设置为一个新的指针(可以是空指针)。调用reset后,std::unique_ptr会释放之前管理的对象(如果有),并开始管理新的对象。 std::unique_ptr<int>ptr1(newint(10));ptr1.reset(newint(20));// ptr1 现在管理新的对象,之前的对象被释放ptr1....
1.get():返回unique_ptr中保存的裸指针 2.reset():重置unique_ptr。 3.release():放弃对指针的控制权,返回裸指针,并将unique_ptr自身置空。通常用来初始化另一个智能指针。 4.swap(q):交换两个智能指针所指向的对象。 【编程实验】std::unique_ptr的基本用法 #include <iostream>#include<vector>#include<...
shared_ptr<int> sp3 = make_shared<int>(2);// 通过make_shared构造,make_shared内部调用了new int(2); sp3.reset(new int(3));// 通过reset重置内部数据指针 sp3.reset();// 通过reset重置内部数据指针为空 1. 2. 3. 4. 5. 6. 注意,不能构造两个独立的智能指针,且指向同一个内部数据指针 int...
uptr.reset(p) 先delete uptr,再将所有权指向p指针 uptr.swap(uptr2) 交换两个智能指针 测试用例: int main() { { unique_ptr<Widget> w1(new Widget(1, 2, 3)); w1->print(); auto w2 = unique_ptr<Widget>(new Widget(10, 20, 30)); w1.swap(w2); w1->print(); w2->print(); w2....
于,unique_ptr 指针指向的堆内存⽆法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独⾃拥有对其所指堆内存空间的所有权。这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引⽤计数,都只能为 1,⼀旦该 unique_ptr 指针放弃对所指堆内存空间的所有权,则该空间会被⽴即释放回收。
reset:重置 shared_ptr,释放当前所管理的对象并接管新的对象。 release:释放对所管理对象的控制权,并返回该指针的裸指针。 swap:交换两个 shared_ptr 的内容。 use_count:返回当前被所有 shared_ptr 指向的对象的引用计数。 ③weak_ptr 在C++ 中,weak_ptr 是一种智能指针(smart pointer),用于解决循环引用问题。
运行结果: Value: 10 ptr1 is empty after move Value: 20 Deleting int pointer Raw pointer value: 10 Value after reset: 30 Deleting int pointer 通过这个示例,可以清楚地看到std::unique_ptr的基本用法及其在资源管理中的优势。
3. unique_ptr的reset()函数可以释放它所管理的对象,并重新指向一个新的对象。 4. unique_ptr的release()函数可以释放它所管理的对象,并返回一个原始指针,控制权不再由unique_ptr管理。 5. unique_ptr的operator->()和operator*()可以用于访问它所管理的对象。 使用unique_ptr的好处是可以避免内存泄漏和悬空指...
可以通过成员函数use_count()来查看资源的所有者个数。出了可以通过new来构造,还可以通过传入auto_ptr, unique_ptr,weak_ptr来构造。当我们调用release()时,当前指针会释放资源所有权,计数减一。当计数等于0时,资源(指向的对象)会被释放。此处调动reset不能销毁对象,只有当计数为0时候才可以。
用法有: reset(T*p):智能指针指向新对象,原来指向的对象的引用计数减1(若减后为0则析构),指向的新对象的引用计数加1 reset(): 原来指向的对象的引用计数-1,然后自己变成null。 usecount:表示智能指针指向的对象(其实说指向的内存更确当)的引用计数,即有多少个智能指针同时指向了它,指向同个对象的智能指针的...