智能指针的简单用法 | 您所在的位置:网站首页 › 指针的简单用法图解 › 智能指针的简单用法 |
std::shared_ptr 首先来介绍shared_ptr,包含在memory头文件中,它的存在,使得更容易也更安全地使用动态内存。 智能指针也是模板,常用其初始化方式有以下几种。初始化方式: 1)默认初始化方式。 std::shared_ptr p1; // 指向空string std::shared_ptr p2; // 指向int的list2)使用make_shared函数模板,make_shared声明如下:(推荐) template shared_ptr make_shared (Args&&... args);从声明可以看出其用法,必须指定想要创建的对象的类型,例如: // 指向一个值为3的int的shared_ptr std::shared_ptr p3 = std::make_shared(3); // 指向值为"9999"的string std::shared_ptr p4 = std::make_shared(4, '9'); // 更简洁的方式,使用auto保存返回结果,构造一个指向空vector auto p5 = std::make_shared();表示使用括号内参数来构造给定的类型对象。 3) 结合new,直接初始化形式 std::shared_ptr p2(new int(4)); // 必须显示初始化,不支持隐式转换。shared_ptr会根据其所指向的对象的引用计数是否为0来决定是否销毁该对象,,并释放所占用的内存。注意不要混合使用普通指针和智能指针,若将一个智能指针绑定到一个普通指针时,我们就把内存的责任交给share_ptr来处理,就不要再使用普通指针来访问内存了。 4) reset方式 std::shared_ptr sp2; sp2.reset(new int(3));std::weak_ptr std::weak是对对象的弱引用,是一种不控制对象生存期的指针,只是用于访问对象,通俗地说就是当没有shared_ptr之类指针指向对象时,即使有weak_ptr指向对象,对象依然会被释放。 初始化代码示例: #include #include int main () { // 构建一个shared_ptr auto sp = std::make_shared(42); std::cout |
CopyRight 2018-2019 实验室设备网 版权所有 |