在C++11中,智能指针(Smart Pointers)是一种自动管理内存的指针类型,它们旨在解决传统裸指针(raw pointers)在资源管理上常见的问题,如内存泄漏、悬挂指针等。智能指针通过自动管理资源的生命周期来减轻这些问题。 1. 解释C++11中的智能指针概念 智能指针是封装了裸指针的对象,它们能够自动管理资源的分配和释放。当智能指...
C/C++ C++11智能指针 在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式调用。 1 2 3 4 5 6 ...
C 程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C 11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好...
using namespace std;structA{~A(){cout<<"A delete"<<endl;}voidPrint(){cout<<"A"<<endl;}};intmain(){autoptr=std::unique_ptr<A>(new A);autotptr=std::make_unique<A>();// error, c++11还不行,需要c++14std::unique_ptr<A>tem=ptr;// error, unique_ptr不允许移动ptr->Print();r...
为了全面掌握智能指针的使用,以下将对C++11标准中的三种主要智能指针进行详细解析,包括其特点、使用方法及适用场景。 std::unique_ptr 特点 独占所有权:unique_ptr拥有其所指向资源的独占所有权,不能被复制,只能被移动。 轻量级:相比shared_ptr,unique_ptr更为轻量,适用于简单的资源管理场景。
C++11中的三个智能指针 unique_ptr 同一时刻只能由唯一的unique_ptr指向指定对象,不支持复制和赋值; shared_ptr 可以多个指针指向相同的对象,通过引用计数机制,支持复制和赋值。每引用一次,内部计数+1;析构一次;内部计数-1;计数为0时,释放该指针; weak_ptr ...
其实,我已经使用C++11两年多了,我无意中发现多种错误使用C++11智能指针的案例,这些错误会使程序效率很低或者直接崩溃。为了方便查找,我把它们按照下文进行了归类。 在开始之前,我们用一个简单的Aircraft类来展示一下这些错误。 C++ 1 2 3 4 5 6 7
C++11 shared_ptr智能指针 实际上,每种智能指针都是以类模板的方式实现的,shared_ptr 也不例外。shared_ptr(其中 T 表示指针指向的具体数据类型)的定义位于头文件,并位于 std 命名空间中,因此在使用该类型指针时,程序中应包含如下 2 行代码: 注意,第 2 行代码并不是必须的,也可以不添加,则后续在使用 shared...
C++11新特性之lambda:http://blog.jobbole.com/104548/ C++11新特性之容器相关特性:http://blog.jobbole.com/104563/ 这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。
1. auto_ptr: c++11中推荐不使用他(放弃) 2.shared_ptr:拥有共享对象所有权语义的智能指针 3.unique_ptr:拥有独有对象所有权语义的智能指针 4.weaked_ptr:到std::shared_ptr所管理对象的弱引用 1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr ...