智能指针 unique_ptr】的更多相关文章

智能指针 unique_ptr 使用 和shared_ptr不同,可以有多个shared_ptr指向同一个内存,只能有1个unique_ptr指向某个内存.因此unique_ptr不支持普通的拷贝和赋值. 一,先来个表格,唠唠unique_ptr 操作 功能描述 unique_ptr<T> u(q) 智能指针u管理内置指针q所指向的对象:q必须指向new分配的内存,且能够转换为T*. unique_ptr<T, D> u(u, d) 用类型为D的对象d来代替delete u = n…
c++11 智能指针 unique_ptr.shared_ptr与weak_ptr C++11中有unique_ptr.shared_ptr与weak_ptr等智能指针(smart pointer),定义在<memory>中. 可以对动态资源进行管理,保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用. unique_ptr unique_ptr持有对对象的独有权,同一时刻只能有一个unique_ptr指向给定对象(通过禁止拷贝语义.只有移动语义来实现). unique_ptr…
C++智能指针 unique_ptr unique_ptr 独占所指向的对象, 同一时刻只能有一个 unique_ptr 指向给定对象(通过禁止拷贝语义, 只有移动语义来实现), 定义于 memory (非memory.h)中, 命名空间为 std. 标准库早期版本中定义了 auto_ptr, 它具有 unique_ptr 的部分特征, 但不是全部, 例如, 不能在容器中保存 auto_ptr, 也不能从函数中返回 auto_ptr. 基于这些原因, 应该尽量使用 unique_ptr, 而不是…
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_ptr<T> myPtr(new T); std::unique_ptr<T> myOtherPtr = myPtr; // error 但是unique_ptr允许通过函数返回给其他的unique_ptr,还可以通过std::move来转移到其他的unique_ptr,注意,这时它本身就…
用智能指针可以简化内存管理.以树为例,如果用普通指针,通常是在插入新节点时用new,在析构函数中调用delete:但有了unique_ptr类型的智能指针,就不需要在析构函数中delete了,因为当unique_ptr类型的指针P生命结束时(比如对于局部变量,程序执行到局部变量的作用域范围之外),P会自动delete它拥有的资源(指针指向的空间).对于shared_ptr,情况更加复杂一些,shared_ptr会维护一个use count,即有多少个指针共享这一资源,当use count为0时,…
起初,我最直观的设计想法,直接设计一个类:包含全部要素(对象,指针计数).然后提供出去. class CPoint { public: CPoint(, ) : x(xVal), y(yVal) {} int getX() const { return x; } int getY() const { return y; } void setX(int xVal) { x = xVal; } void setY(int yVal) { y = yVal; } private: int x, y;…
转自:https://www.cnblogs.com/DswCnblog/p/5628195.html 成员函数 (1) get 获得内部对象的指针, 由于已经重载了()方法, 因此和直接使用对象是一样的.如 unique_ptr<int> sp(new int(1)); sp 与 sp.get()是等价的 (2) release            放弃内部对象的所有权,将内部指针置为空, 返回所内部对象的指针, 此指针需要手动释放 (3) reset              销毁内部对…
unique_ptr 不共享它的指针.它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法. 1.不能进行复制构造和赋值操作(unique_ptr不支持拷贝操作,可以从函数中返回一个unique_ptr) 2.无法进行移动构造和移动赋值操作(std::move()) 3.支持数组 4.std::make_unique从c++14开始 class A { int data_; public: A(int data_1,int data_…
unique_ptr 对对象独有管理,无法复制,共享,值传递,可以使用move语义来转移控制权. std::default_delete<int> d; std::unique_ptr<int> u1; std::unique_ptr<int> u2 (nullptr); std::unique_ptr<int> u3 (new int); std::unique_ptr<int> u4 (new int, d); std::unique_ptr…
一. unique_ptr的基本用法 (一)初始化方式 1. 直接初始化:unique<T> myPtr(new T);  //ok.但不能通过隐式转换来构造,如unique<T> myPtr = new T().因为unique_ptr构造函数被声明为explicit. 2. 移动构造:unique<T> myOtherPtr = std::move(myPtr);但不允许复制构造,如unique<T> myOther = myPtr; 因为unique是…
C++ 11标准库引入了几种智能指针 unique_ptr shared_ptr weak_ptr C++内存管理机制是当一个变量或对象从作用域过期的时候就会从内存中将他干掉.但是如果变量只是一个指针的话,干掉的就只是指针自身,而指针所指向的内存还是存在的,这就是所谓的内存泄漏.智能指针的出现就是为了解决这个问题. 智能指针的大体原理:当智能指针对象过期的时候,会执行智能指针对象的析构函数,在这里我们选择进行对所指堆对象的清除操作. 智能指针的头文件是 #include<memory> 定义在…
////一个简单的防止内存泄露的例子//void test() { //使用RAII的特性管理资源 //当智能指针unique_ptr被销毁时,它指向的对象也将被销毁 //这里test函数返回后 p将自动销毁 //unique_ptr<int[]> p( new int[200] ); //直接生成资源 //test函数返回后 p不能被正常销毁,就会造成资源泄露 //int* p = new int[200]; } int main() { ) { test(); Sleep( ); } ;…
在c++98中,智能指针通过一个模板“auto_ptr”来实现,auto_ptr以对象的方式来管理堆分配的内存,在适当的时间(比如析构),释放所获得的内存.这种内存管理的方式只需要程序员将new操作返回的指针作为auto_ptr的初始值即可,程序员不能显式的调用delete.如 auto_ptr(new int);    这在一定程度上避免了堆内存忘记释放造成的问题.不过auto_ptr也有一些缺点(拷贝是返回一个左值,不能调用delete[]等),所以在c++11中被废弃了.c++11标准照中…
智能指针 在C++库中最重要的类模板之一 智能指针实际上是将指针封装在一个类里,通过对象来管理指针. STL中的智能指针auto_ptr 头文件: <memory> 生命周期结束时,自动摧毁指向的内存空间 不能指向堆数组(因为auto_ptr的析构函数删除指针用的是delete,而不是delete[]) auto_ptr的构造函数为explicit类型,所以只能显示初始化,比如: auto_ptr<)); //初始化正确,创建ap1类模板对象,使类模板里的指针为int*型,并指向1的地址…
平时习惯使用cocos2d-x的Ref内存模式,回过头来在控制台项目中觉得c++的智能指针有点生疏,于是便重温一下.首先有请c++智能指针们登场: std::auto_ptr.std::unique_ptr.std::shared_ptr .std::weak_ptr |auto_ptr(不要使用的指针) 没有智能指针的c++时代,对堆内存的管理就是简单的new delete.但是缺点是容易忘了delete释放,即使是资深码农,也可能会在某一个地方忘记delete它,造成内存泄漏.在实际工程中,…
/* 智能指针unique_ptr */ #include <iostream> #include <string> #include <memory> #include <vector> /* unique_ptr 独占所指向的对象, 同一时刻只能有一个 unique_ptr 指向给定对象(通过禁止拷贝语义, 只有移动语义来实现), 定义于 memory (非memory.h)中, 命名空间为 std. unique_ptr 不支持拷贝和赋值. */ st…
0.目录 1.数组类模板 1.1 类模板高效率求和 1.2 数组类模板 1.3 堆数组类模板 2.智能指针类模板 2.1 使用智能指针 2.2 智能指针类模板 3.单例类模板 3.1 实现单例模式 3.2 单例类模板 4.小结 1.数组类模板 模板参数可以是数值型参数(非类型参数): 数值型模板参数的限制: 变量不能作为模板参数 浮点数不能作为模板参数 类对象不能作为模板参数 ... 本质: 模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定. 1.1 类模板高效率求和 用…
整理一下c++中shared_ptr,weak_ptr,unique_ptr三种指针的使用案例和注意事项,让程序资源更加案例,在标准库中,需要包含<memory>,在boost库中, 一. 智能指针unique_ptr 与shared_ptr相似,区别在于unique_ptr是独立拥有对象权,因此只有move语言,无拷贝语义,不做其它详述了. 二.智能指针share_ptr 1.基本使用 class Sam { public: Sam(int v):val(v) { } int32_t val…
智能指针类模板智能指针本质上就是一个对象,它可以像原生指针那样来使用. 智能指针的意义-现代C++开发库中最重要的类模板之一-C++中自动内存管理的主要手段-能够在很大程度上避开内存相关的问题 1.内存泄露,在测试阶段很难发现.造成的原因就是申请堆空间中的内存,忘记释放. 2.多次指针释放:一个指针指向了一片堆空间中的内存,这片内存只需要释放一次,如果在代码中不小心释放了多次,后果也是不确定的,有可能程序马上会死掉,有可能程序过一段时间才死掉. STL中的智能指针auto_ptr-生命周期结束时…
我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如我们不希望多个内存块被多个智能指针对象共享,同时又不会像auto_ptr那样不知不觉的就让原来的auto_ptr对象失效,可咋整呢? 这个时候就要使用unique_ptr了,顾名思义嘛,unique是唯一的意思.说明它跟auto_ptr有点类似,就是同时只能有一个智能指针对象指向某块内存.但它还有些…