码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 学习笔记:动态内存(一)直接管理内存

时间:2015-04-15 00:35:35      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

what:什么是动态内存?

  c++中,普通变量(非static对象)存储在栈内存中,静态变量(局部static、类static)存储在静态内存中,在系统中还存在另外一种内存池,这部分内存供程序来分配,一般称作“自由空间“(free store)或”堆“(heap)。

where & When:在哪里何时使用动态内存?

  以往学的变量中,全局对象在程序启动时创建,程序结束时销毁;局部对象在进入程序块时被创建,在离开块时被销毁;局部static对象在第一次使用时被创建,在程序结束时被销毁。可是有时候我们需要另外一种对象,其生存期与它们在哪里创建是无关的,只有当显式被释放时,这些对象才被销毁,这就是动态对象。动态对象调用动态内存。

how:怎样开始使用动态内存?

  •   使用new动态分配和初始化对象
    • 两种初始化方式:默认初始化和值初始化
    • //第一种初始化方式:默认初始化:
      string *ps = new string ;  // 初始化为空的string
      int *ps = new int ;  //并未对ps所指向的内存进行初始化
      //第二种初始化方式:值初始化:
      string *ps = new string ;  // 初始化为空的string
      int *ps = new int ;  // 初始化0
  • 使用delete删除对象
    • new分配的自由空间必须用delete删除,否则该内存会一直占用到计算机重启。(内存泄露)
    • delete删除过后的指针指向未定义,此时的指针称为“空悬指针”,调用空悬指针的危害等于调用野指针。(空悬指针在离开作用域后自动销毁)
    • delete只能用来删除动态分配的对象,可是一般情况下编译器不能识别对象是动态还是静态,这需要程序员来识别。
    • 不能对同一对象删除两次。delete pi ; 在第一次删除pi后,pi已经指向了一个未定义的内存,此时delete该内存会影响pi指向的未定义的自由空间,该堆内存会被破坏。(严重危害)

why:为什么使用动态内存?

  参考:[转]为什么用动态内存分配 

 

为了降低c++直接管理内存的难度,C++11推出了智能指针特性优化了这种内存管理。明天继续~晚安~

c++ 学习笔记:动态内存(一)直接管理内存

标签:

原文地址:http://www.cnblogs.com/minemine/p/4426168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!