美文网首页
直接内存管理

直接内存管理

作者: 是你亮哥哥呀 | 来源:发表于2019-08-20 19:04 被阅读0次

直接内存管理(new/delete):

1.初始化

int * point_i = new int; //初值未定义
string *mystr = new string; //空字符串
int *point_i_2 = new int(10); //初始化10
string * mystr_2 = new string(5, 'a'); //字符串长度5,默认值'a'
vector<int> *point_v = new vector<int>{1, 2, 3, 4, 5};

概念:值初始化,用()空括号初始化,对于对象来说,加不加()效果一样,但是为了避免出现初值未定义,建议都是用值初始化

int * point_i = new int(); //初始化为0
string * mystr = new string(); //初始化为空字符串

const对象也可以动态分配

const int * point_ci = new const int(100);

new 和 delete 说明

  • 成对使用, delete的作用是回收new分配的内存,不是new出来的内存,是不能用delete释放的;
  • delete一块内存,只能delete一次。delete后,这块内存就不存在;但是,空指针可以删除多次,但删除多次并没有意义。
int * p = new int();
int *p2 = p;
delete p2;
delete p; //运行报错,p和p2指向同一块内存,智能指针可以解决这个问题

char * p3 = nullptr;
delete p3;
delete p3; //不报错

注意事项

  1. new出来的内存千万不要忘记delete,否则内存泄漏,时间一长可能资源紧张,运行崩溃
  2. delete后的内存不能再使用,否则异常
  3. 同一块内存释放两次的问题,异常

用new,delete直接内存管理,要很小心;
c++11开始出现了智能指针,new,忘记了delete,智能指针能够帮你delete

相关文章

  • 直接内存管理

    直接内存管理(new/delete): 1.初始化 概念:值初始化,用()空括号初始化,对于对象来说,加不加()效...

  • JVM内存管理---直接内存

    直接内存,不是Java虚拟机规范中定义的内存区域,但是这一部分仍然会出现OutOfMemoryError异常。 J...

  • Swift底层探索(四):内存管理

    内存管理 Swift中使用自动引用计数(ARC)机制来追踪和管理内存。 通过 lldb直接查看refCounted...

  • 【iOS】内存管理

    内存管理直接决定程序的安全性和稳定性。核心要点包括:循环引用、内存泄露、内存管理规则、垃圾回收机制。Objecti...

  • iOS 内存相关的基础知识

    为什么不能直接访问物理内存? 内存不够用。 内存数据不安全。 内存管理方案 相关知识点[https://jueji...

  • linux 虚拟内存的作用?

    虚拟内存可以用来管理物理内存,进程直接和虚拟内存进行打交道而不是物理内存,为什么这样设计? 什么是虚拟内存? 虚拟...

  • 直接内存

    直接内存 直接内存并不是虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用...

  • 直接内存

    什么是直接内存直接内存就是指:java堆外内存。直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中...

  • 内存管理及相关面试题详解

    一、内存管理 1. 内存五大区 栈区(Stack):速度比较快,寄存器直接访问内存空间。编译器自动分配,由系统管理...

  • PHP内存管理 垃圾回收

    本文是php-internals的读书笔记. 概述1) 操作系统直接管理着内存,所以操作系统也需要进行内存管理,计...

网友评论

      本文标题:直接内存管理

      本文链接:https://www.haomeiwen.com/subject/ezcmsctx.html