1.指针赋值: o确保指针在使用之前已经被正确初始化。未初始化的指针可能导致未定义的行为。 o避免悬挂指针(dangling pointer)。当指针指向一个已被释放的内存块时,再次使用该指针是危险的。 o避免野指针(wild pointer)。这是指向未分配内存的指针。 o当指向的内存被释放后,确保将指针设置为NULL,以防止野指针的产...
对于特定的对象,只能有一个智能指针可拥有,这样只有拥有对象的智能指针的构造函数会删除该对象。然后让赋值操作转让所有权。这就是用于auto_ptr和uniqiie_ptr 的策略,但unique_ptr的策略更严格。 创建智能更高的指针,跟踪引用特定对象的智能指针数。这称为引用计数。例如,赋值时,计数将加1,而指针过期时,计数将减1...
虽然不能拷贝或赋值unique_ptr,但可以通过调用release()/reset()函数将指针的所有权转移给另一个unique_ptr。 4.shared_ptr智能指针 常用的成员函数: get():返回指向变量的原始指针。 reset():重置智能指针,使它所持有的资源为空。 swap():交换两个智能指针所管理的资源。 use_count():返回智能指针所指向变量...
参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset()赋值为另一指针。
实现智能指针有两种经典策略:一是引入辅助类,二是使用句柄类。 以下样例使用辅助类来实现: #include"iostream"usingnamespacestd;//定义一个普通类classbookClass{private:string name;intprice;public:intgetPrice(){returnprice;}};//辅助类classCounter{private:friendclasssmartPoint;Counter(bookClass*book):bk(bo...
c/c++ 智能指针 unique_ptr 使用 智能指针 unique_ptr 使用 和shared_ptr不同,可以有多个shared_ptr指向同一个内存,只能有1个unique_ptr指向某个内存。因此unique_ptr不支持普通的拷贝和赋值。 一,先来个表格,唠唠unique_ptr 小例子索引 小例子 include <iostream>#include<memory>#include<vector>using name...
注意,同一普通指针不能同时为多个 shared_ptr 对象赋值,否则会导致程序发生异常。例如: 4) 在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0 时,会优先调用我们自定义的释放规则。 在某些场景中,自定义释放规则是很有必要的。比如,对于申请的动态数组来说,shared_pt...
auto_ptr是一个智能指针,用于管理通过新表达式获得的对象,并在销毁auto_ptr本身时删除该对象。 当使用auto_ptr类描述对象时,它存储指向单个已分配对象的指针,以确保当其超出范围时,它指向的对象必须自动销毁。它基于专有所有权模型,即相同类型的两个指针不能同时指向同一资源。如以下程序所示,指针的复制或分配会更改...
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。 shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计...