直接内存管理

直接内存管理(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,533评论 1 51
  • C++运算符重载-下篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 1,459评论 0 49
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • 内存管理 C++使用new和delete两个运算符进行内存管理。 使用new进行动态分配和初始化对象 在自由空间内...
    plantom阅读 362评论 0 1
  • 几种语言的特性 汇编程序:将汇编语言源程序翻译成目标程序编译程序:将高级语言源程序翻译成目标程序解释程序:将高级语...
    囊萤映雪的萤阅读 2,939评论 1 5