动态内存:delete作用于空指针】的更多相关文章

在学习<C++primer 第五版>(中文版)中第12章动态内存与智能指针的时候遇到了一个习题,练习12.13: 练习 12.13:如果执行下面的代码,会发生什么? auto sp=make_shared<int>(); auto p=sp.get(); delete p; 上述代码创建了一个指向int的空智能指针sp,然后调用get()创建了一个指向int的普通指针p,随后delete普通指针p. 但看这三行代码,会认为题目考察delete一个空指针时会发生什么事情,但是结合书中…
动态内存与只能指针 静态内存用来保存局部static对象, 类static数据成员以及定义在任何函数之外的变量. 栈内存用来保存定义在函数内的非static对象. 分配在静态或栈内存中的对象由编译器自动创建和销毁. 栈中的对象, 仅在其定义的程序块运行时才存在; static对象在使用之前分配, 在程序结束时销毁. 自由空间或堆用来存储动态分配的对象--即在程序运行时分配的对象. 动态对象的生存期由程序来控制, 也就是说, 当动态对象不在使用时, 我们的代码必须显示地销毁它们. 动态内存与智能指…
对象的生存期: 全局对象:程序启动时创建,程序结束时销毁 局部static对象:第一次使用前创建,程序结束时销毁 局部自动对象:定义时创建,离开定义所在程序块时销毁 动态对象:生存期由程序控制,在显式创建时创建,显式销毁时销毁 动态对象的正确释放极易出错.为安全使用动态对象,标准库定义了智能指针来管理动态对象 内存空间: 静态内存:局部static对象.类static数据成员.定义在任何函数之外的变量 栈内存:定义在函数内的非static对象 堆内存:动态对象,即运行时分配的对象 静态内存和栈内…
目录 一.介绍 二.shared_ptr类 make_shared函数 shared_ptr的拷贝和引用 shared_ptr自动销毁所管理的对象- -shared_ptr还会自动释放相关联对象的内存 使用动态生存期的资源的类 应用举例:Blob类 定义Blob类 StrBlob的构造函数 元素访问成员函数 StrBlob的拷贝.赋值和销毁 三.直接管理内存 使用new分配内存 使用new动态分配和初始化对象 动态分配const对象 内存耗尽 使用delete释放内存 基本介绍 举例 四.sha…
C++动态内存new和delete C++动态内存是C++灵活.炫酷的一种操作.学好它,能让自己编程逼格上一个level. 在学习动态内存之前,我们先要了解C++是怎么划分内存的: 栈:在函数内部声明的所有变量都将占用栈内存.栈是由编译器自动分配和释放的,由系统分配. 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存.大名鼎鼎的GC(Garbage Collection)垃圾回收机制在堆内存上进行的. 这里的栈和堆和数据结构中的栈和堆不是一个概念,不要搞混.内存在物理上其实都是相同的,…
C++语言定义了两个运算符来分配和释放动态内存:运算符new分配内存,运算符delete释放new分配的内存. 运算符new和delete 使用new动态分配和初始化对象 在自由空间分配的内存是无名的,因此new无法为其分配的对象命名,而是返回一个指向该对象的指针: int* p = new int; 默认情况下,用new分配的对象进行默认初始化,如果动态分配的对象是一个类,则使用类的默认构造函数.而对于内置类型,它的值将是未定义的. string* str = new string; // 初…
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象的生存期由程序来控制 ,当动态对象不再使用时,程序必须显式的销毁它们. new和delete的使用 C++中通过一对运算符new和delete来完成动态内存分配.new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象初始化:delete接受一个动态对象的指针,销毁对象,并释…
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象的生存期由程序来控制 ,当动态对象不再使用时,程序必须显式的销毁它们. new和delete的使用 C++中通过一对运算符new和delete来完成动态内存分配.new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象初始化:delete接受一个动态对象的指针,销毁对象,并释…
六 C++的布尔类型 bool类型是C++中基本类型,专门表示逻辑值:true/false bool在内存上占一个字节:1表示true,0表示false bool类型可以接收任意类型和表达式的结果,其值非0则为true,值为0则为false 七 操作符别名(了解) && --> and || --> or { --> <% } --> %> ... 八 C++函数 函数重载 strcpy(char*,const char*) strcpy(char*,c…
动态内存管理 动态对象(堆对象)是程序在执行过程中在动态内存中用new运算符创建的对象. 因为是用户自己用new运算符创建的.因此也要求用户自己用delete运算符释放,即用户必须自己管理动态内存. 计算机内存数据区常有三种分区.即静态数据区.堆区.桟区. 1.程序在编译时就为静态变量和静态对象分配了静态数据存储区.在静态数据区中存储的变量或对象在该程序的整个执行期间都存在. 它们的生命周期贯穿整个程序的执行周期.比方全局变量.static(静态)变量等都是存储在静态数据区. 2.调用函数时.函…