Shared_ptr{std::move(rhs)}.swap(*this);return*this; }voidreset()noexcept{ Shared_ptr{}.swap(*this); }voidreset(nullptr_t)noexcept{reset(); }voidreset(T *ptr){ Shared_ptr{ptr}.swap(*this); }voidswap(Shared_ptr &
std::shared_ptr<int> sp2 = sp1; printf("%d\n", *sp0);// 2 printf("%d\n", *sp1);// 11 printf("%d\n", *sp2);// 11 sp1.swap(sp0); printf("%d\n", *sp0);// 11 printf("%d\n", *sp1);// 2 printf("%d\n", *sp2);// 11 std::shared_ptr<int> sp3(newint(22));...
1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset(...
shared_ptr可以协调对象的析构,但这仅限于其自身的拷贝(也是shared_ptr)之间。 // 在函数被调用时ptr被创建并初始化 void process(shared_ptr<int> ptr) { // 使用ptr } // ptr离开作用域,被销毁 int main() { shared_ptr<int> p(new int(42)); // 引用计数为1 process(p); // 拷贝p会递增它...
shared_ptr允许多个指针指向同一个变量。 unique_ptr则独占所指向的变量。 weak_ptr则指向shared_ptr所管理的变量。 2.智能指针的基础用法 1.智能指针的初始化 智能指针是基于类模板生成的,因此,要初始化一个智能指针,就必须声明指针所指向的数据类型,不然智能指针里面包含的原始指针是个空指针。
shared_ptr使用一个引用计数器,类似java中对象垃圾的定位方法,如果有一个指针引用某块内存,则引用计数+1,释放计数-1.如果引用计数为0,则说明这块内存可以释放了。 模型如下: 引用计数让我们的可以有多个指针拥有使用权,但是这种方式还是会有风险的,假如一个指针对指向的内存区域进行了更改,则其他指针希望是原来的值...
std::swap(std::shared_ptr) (C++11) 特化std::swap 算法 (函数模板) std::atomic_is_lock_free(std::shared_ptr)std::atomic_load(std::shared_ptr)std::atomic_load_explicit(std::shared_ptr)std::atomic_store(std::shared_ptr)std::atomic_store_explicit(std::shared_ptr)std::atomic_exchange...
shared_ptr:允许多个指针指向同一个对象,通过引用计数的方式来实现多个shared_ptr对象之间的资源共享。 注意: shared_ptr内部维护了一个引用计数变量,该变量是指针类型int*,只有指针类型才能保证拷贝自同一对象的不同对象享有相同的引用计数变量。 当对象被销毁时,会将对象的引用计数减一 ...
(root, grand_parent_pt); swap(parent_pt->color, grand_parent_pt->color); pt = parent_pt; } } else { // 对称操作:父节点是祖父节点的右子节点 Node *uncle_pt = grand_parent_pt->left; if ((uncle_pt != nullptr) && (uncle_pt->color == RED)) { grand_parent_pt->color = RED...
resize()是重置大小;reserve()是预留空间,并未改变size(),可避免多次扩容; clear()并不会导致空间收缩 ,如果需要释放空间,可以跟空的vector交换,std::vector .swap(v),c++11里shrink_to_fit()也能收缩内存。 理解at()和operator[]的区别 :at()会做下标越界检查,operator[]提供数组索引级的访问,在release版...