智能指针陷阱

1、不使用相同的内置指针初始化多个智能指针(reset也不行)

2、不delete get() 返回的指针

3、不使用gat() 初始化 或reset 其他智能指针

4、如果使用get()返回的指针,要记住当最后一个智能指针被销毁后,指针就变得无效了。

5、if使用的智能指针管理的资源不是new分配的,要传给他们一个删除器

时间: 2024-12-06 11:18:46

智能指针陷阱的相关文章

OSG 智能指针陷阱

先看下这个代码,有什么问题: #include <osg/Group> #include <osg/Node> #include <osg/Geode> osg::Geode *geode= NULL; osg::ref_ptr<osg::Group> root = NULL; void createNode(){ geode = new osg::Geode; geode->setName("Hello"); root = new

动态内存——动态内存与智能指针

全局对象在程序启动时分配,在程序结束时销毁.对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁.局部static对象在第一次使用前分配,在程序结束时销毁. 除了自动和static对象外,C++还支持动态分配对象.动态分配的对象的生命期与它们在哪里创建是无关的,只有当显示地被释放时,这些对象才会销毁. 静态内存用来保存局部static对象.类static数据成员以及定义在任何函数之外的变量.栈内存用来保存定义在函数内的非static对象.分配在静态或栈内存中的对象由编译器自动创

智能指针的使用与陷阱

在包含指针的类中需要注意复制控制,复制指针时只复制指针中的地址,不会复制指针指向的对象. 大多数c++类采用三种方法管理指针成员: 1)指针成员采用常规指针型行为. 2)采用智能指针 3)采取值型行为 常规指针缺陷:可能会出现悬垂指针.当一个指针复制到另一个指针,两个指针指向同一个对象,当一个指针删除对象时,另一个指针不知道,所以出现悬垂指针.即使使用默认合成复制构造函数也会出现,类本身无法避免. 智能指针:加入了引用计数.引用计数跟踪该类有多少对象共享同一指针.当引用计数为0 时,删除对象.创

C++--智能指针、逻辑操作符的陷阱

一.智能指针 内存泄漏(C++主要的Bug来源)1.动态申请堆空间,用完后不归还2.C++语言中没有垃圾回收机制3.指针无法控制所指堆空间的生命周期代码示例 #include <iostream> #include <string> using namespace std; class Test { int i; public: Test(int i) { this->i = i; } int value() { return i; } ~Test() { } }; int

Boost智能指针-基础篇

简介 内存管理一直是 C++ 一个比较繁琐的问题,而智能指针却可以很好的解决这个问题,在初始化时就已经预定了删除,排解了后顾之忧.1998年修订的第一版C++标准只提供了一种智能指针:std::auto_ptr(现以废弃),它基本上就像是个普通的指针:通过地址来访问一个动态分配的对象.std::auto_ptr之所以被看作是智能指针,是因为它会在析构的时候调用delete操作符来自动释放所包含的对象.当然这要求在初始化的时候,传给它一个由new操作符返回的对象的地址.既然std::auto_pt

C++11中智能指针的原理、使用、实现

目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理.程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存.使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存. 理解智能指针需要从下面三个层次: 从较浅的层面看,智能指针是利用了一种叫做RAII(资

boost智能指针之shared_ptr和weak_ptr

std::auto_ptr很多的时候并不能满足我们的要求,比如auto_ptr不能用作STL容器的元素.boost的smart_ptr中提供了4种智能指针和2种智能指针数组来作为std::auto_ptr的补充. shared_ptr<boost/shared_ptr.hpp>:使用shared_ptr进行对象的生存期自动管理,使得分享资源所有权变得有效且安全. weak_ptr<boost/weak_ptr.hpp>:weak_ptr 是 shared_ptr 的观察员.它不会干

(转)C++11里的智能指针

1. std::auto_ptr有些违背c++编程思想. 已经被"不建议使用了".2. 下文转自:http://blog.csdn.net/lanergaming/article/details/24273419 c#和java中有自动垃圾回收机制,.net运行时和java虚拟机可以管理分配的堆内存,在对象失去引用时自动回收,因此在c#和jva中, 内存管理不是大问题.c++语言没有垃圾回收机制,必须自己去释放分配的堆内存,否则就会内存泄露. 我相信大部分c++开发人员都遇到过内存泄露

c++ primer笔记------智能指针

智能指针的陷阱 基本规范: 1.不使用相同的内置指针值初始化(或reset)多个智能指针.  double free 2.不delete get() 返回的指针.  double free 3.不使用get() 初始化或reset另一个智能指针.  double free 4.如果你使用get() 返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就变为无效了.   空悬指针 5.如果你使用智能指针管理的资源不是new分配的内存,记住传递给它一个删除器.    非new类型指针需要自己指定