`

weak_ptr

 
阅读更多
unique_ptr(定义在中)提供了一种严格的语义上的所有权

拥有它所指向的对象
无法进行复制构造,也无法进行复制赋值操作(译注:也就是对其无法进行复制,我们无法得到指向同一个对象的两个unique_ptr),但是可以进行移动构造和移动赋值操作
保存指向某个对象的指针,当它本身被删除释放的时候(例如,离开某个作用域),会使用给定的删除器(deleter)删除释放它指向的对象,
unique_ptr的使用能够包括:

为动态申请的内存提供异常安全
将动态申请内存的所有权传递给某个函数
从某个函数返回动态申请内存的所有权
在容器中保存指针
“所有auto_ptr应该已经具有的(但是我们无法在C++98中实现的)功能”

#include <iostream>
#include <memory>
#include <string>
using namespace std;

unique_ptr<int> fun()
{
	unique_ptr<int> p(new int(1));
	return p;	
}

int main()
{
	unique_ptr<string> p2(new string("aaa"));
	cout << *p2.get() << endl;
	unique_ptr<int> p3(fun());
	cout << *p3.get() << endl;
	//unique_ptr<string> p4(p2); //error
}

aaa
1


分享到:
评论

相关推荐

    C++ unique_ptr weak_ptr shared_ptr auto_ptr智能指针.doc

    在 C++ 中,有四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,每种智能指针都有其特点和使用场景。 一、auto_ptr auto_ptr 是 C++98 中引入的智能指针,它可以自动释放动态分配的内存。但是,auto_...

    C++ 智能指针(shared_ptr/weak_ptr)源码

    C++ 智能指针(shared_ptr/weak_ptr)源码 源码位置:gcc-6.1.0\gcc-6.1.0\libstdc++-v3\include\tr1 这里只单列shared_ptr.h文件用于分析

    C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)

    本文主要讨论了三种智能指针:`shared_ptr`、`unique_ptr`和`weak_ptr`。 首先,`shared_ptr`是引用计数型智能指针,它维护了一个内部的引用计数,用于跟踪有多少个`shared_ptr`实例指向同一对象。当创建一个新的`...

    C++11智能指针之weak_ptr详解

    其中,`weak_ptr`是为了解决`shared_ptr`中可能出现的循环引用问题而引入的一种特殊类型的智能指针。本文将深入探讨`weak_ptr`的概念、用途及其使用方法。 1. 为什么需要`weak_ptr`? `shared_ptr`是C++11中引入的...

    test_share_ptr

    std::weak_ptr&lt;int&gt; weak_ptr(ptr); if (std::shared_ptr&lt;int&gt; strong_ptr = weak_ptr.lock()) { // 对象仍然有效,可以使用strong_ptr } else { // 对象已被销毁,不能使用 } ``` 在"test_share_ptr"项目中,...

    浅析Boost智能指针:scoped_ptr shared_ptr weak_ptr

    【Boost智能指针详解:scoped_ptr、shared_ptr与weak_ptr】 智能指针是C++中用来自动管理动态分配内存的对象,它可以确保在适当的时间释放内存,以防止内存泄漏。Boost库提供了一组智能指针类型,包括scoped_ptr、...

    智能指针shared_ptr的Demo

    3. 从原始指针转换:`std::shared_ptr&lt;T&gt; ptrRaw(ptr_raw);`,其中`ptr_raw`是原始指针。 4. 从另一个`shared_ptr`复制:`std::shared_ptr&lt;T&gt; ptrCopy(ptrOther);`,这样两个`shared_ptr`将共享相同的引用计数。 ...

    weak-ptr 和 shared-ptr 源码

    `shared_ptr`和`weak_ptr`是两种常见的智能指针类型,分别代表了强引用和弱引用的概念。 `shared_ptr`是C++11引入的一种智能指针,它管理一个动态分配的对象,并在不再有引用指向该对象时自动删除它。`shared_ptr`...

    一个最小的sharedunique_ptr实现来处理booststdsharedunique_ptr不可用的情况。.zip

    `unique_ptr`的删除器通常在构造函数中指定,而`shared_ptr`的删除器可以通过弱指针(`weak_ptr`)共享,以确保即使所有`shared_ptr`都失效后,仍能正确释放资源。 3. **构造函数和赋值操作符**:为了创建和操作...

    shared_ptr只能对new的内存操作

    - **可与`std::weak_ptr`配合使用**:`std::weak_ptr`不增加引用计数,用于防止循环引用问题。 #### shared_ptr只能对new的内存操作 如标题所示,“shared_ptr只能对new的内存操作”这一说法强调了`std::shared_...

    shared_ptr

    在智能指针家族中,`shared_ptr`和`weak_ptr`是TR1(Technical Report 1)的一部分,也被称为Boost库的一部分,并被整合到了C++11标准中。 ### shared_ptr `shared_ptr`是一种引用计数智能指针,当一个`shared_ptr...

    count_ptr.rar_智能指针

    在C++中,标准库提供了几种智能指针类型,如`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`。这些智能指针在析构时会自动调用所指对象的析构函数,从而释放内存。 2. **自定义智能指针`count_ptr`**: ...

    奇妙的C++——智能指针

    3. **std::weak_ptr**:std::weak_ptr是std::shared_ptr的辅助类,它不增加对象的引用计数,而是保持对对象的弱引用。这避免了循环引用的问题,当对象被所有std::shared_ptr释放后,std::weak_ptr尝试访问对象时会抛...

    Boost智能指针示例源码

    `weak_ptr`可以作为观察者,当`shared_ptr`引用计数为零时,`weak_ptr`可以通过尝试转换为`shared_ptr`来检测对象是否已经被删除。如果对象仍然存在,`weak_ptr::lock()`方法可以返回一个新的`shared_ptr`,否则返回...

    C/C++ 学习入门代码案例 - RAII样例代码

    ​ 重点掌握 unique_ptr 原理,shared_ptr 原理(引用计数管理方法),weak_ptr 与 shared_ptr的区别:weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命...

    C++11 智能指针之shared_ptr代码详解

    当 `shared_ptr` 的引用计数降为零时,即使还有 `weak_ptr` 存在,对象也会被删除。`weak_ptr` 需要先转换为 `shared_ptr` 才能访问对象。 7. **自定义删除器** 可以通过传递自定义的删除器给 `shared_ptr` 构造...

    shared_ptr线程安全性全面分析

    虽然`weak_ptr`不参与对象的生命周期管理,但它的构造和析构过程中涉及到`shared_ptr`的引用计数,因此`weak_ptr`的使用也必须是线程安全的。在`shared_ptr`的线程安全设计中,`weak_ptr`的这部分交互也被考虑在内,...

Global site tag (gtag.js) - Google Analytics