C++ primer 第十二章笔记之 动态数组

new与数组

为了让new分配一个对象数组,必须在类型名之后跟[].在其中指明分配的数目;

int *pia = new int [ get_size() ];
//[]内必须为整型,但不必是常量;

typedef int arrT[24];
int * p = new arrT;
//分配一个24个int的数组,p指向第一个int;

初始化,C++11:可用花括号{};

动态分配一个空数组是合法的;

释放动态数组:

delete p;
delete []  pa;

智能指针与动态数组:

标准库提供了一个可以管理new分配的数组的unique_ptr版本

必须在类型后面加上空的[];

// up指向一个包含10个未初始化的int数组;
unique_ptr<int[]> up (new int  [10] );
up.release();    //自动delete[],销毁其指针;

注意:up指向的一个int数组,而非一个int,不能使用点或箭头成员运算符;

但可以使用下标运算符来访问数组中的元素;

for(size_t i =0; i!=10;++i){
        up[i] = i;
}

shared_ptr不支持管理动态数组

shared_ptr未定义下标运算符,而且智能指针类型不支持指针算数运算;

若用它,必须自己定义删除器;

shared_ptr<int> sp(  new int[10], [](int *p){ delete []p;} );
sp.reset();//使用自定义的lambda释放数组,它使用delete[];
时间: 2024-11-06 03:53:33

C++ primer 第十二章笔记之 动态数组的相关文章

C++ primer 第十二章笔记之 动态内存

动态内存: 运算符:new,delete 智能指针: 头文件:memory shared_ptr:允许多个指针指向同一个对象; unique_ptr:"独占"所指向的对象; weak_ptr:一种弱引用,指向shared_ptr所管理的对象; shared_ptr类 智能指针也是模板,创建指针时,提供指针指向的类型; //创建: shared_ptr<string> p1; //若p1不为空,检测它是否指向一个空string if( p1 &&p1->

C++primer第十二章读书笔记---动态内存与智能指针

    目前为止我们使用过的静态内存,栈内存和内存池,静态内存用来保存局部static对象.类static成员,以及定义在任何函数之外的成员.栈内存用来保存定义在函数内部的非static成员,分配在静态 内存或栈内存中的对象由编译器自动创建或销毁,对于栈对象仅在其定义的程序块运行时才有效,static对象在程序运行之前分配,程序结束时销毁.除了静态内存和栈内存外,每个程序还拥有一个内存池(堆)在堆上分配动态对象,当动态对象不再使用时,我们必须显示的销毁它.     (一).动态内存与智能指针  

C++Primer 第十二章

//1.标准库提供了两种智能指针类型来管理动态对象,均定义在头文件memory中,声明在std命名空间. // shared_ptr:允许多个指针指向同一个对象. // unique_ptr:独占所指的对象. // 标准库还定义了weak_ptr的伴随类,它是一种弱作用.指向shared_ptr所管理的对象. //2.shared_ptr和unique_ptr均支持的操作: shared_ptr<T> sp unique_ptr<T> up:空智能指针,指向类型为T的对象 p :将

C++ Primer之 十二章 类

1.关于类的const对象 const对象只能调用声明为const的成员函数,在这篇csdn博客中也讨论了这个问题. 究其原因是因为 const 对象A 调用了非const函数F, F因为没有const约束可以修改A对象内的成员, 这不就违反了原来对A 声明const的本意了吗? 反之,非const对象调用const函数则是可以的. 2.基于const的重载 关于const修饰的成员函数可以详见这篇新浪博客! 基于成员函数是否为const,可以重载一个成员函数: 基于一个指针形参是否为const

【C++ Primer 第十二章】 shared_ptr和new的结合使用

shared_ptr和new的结合使用 • 如果我们不初始化一个智能指针,它就会被初始化一个空指针. • 一个shared_ptr默认初始化为一个空指针.我们也可以使用new返回的指针来初始化一个shared_ptr: shared_ptr<double> p1; // shared_ptr可以指向一个double shared_ptr<int> p2(new int(42)); // p2指向一个值为42的int • 接受指针参数的智能指针构造函数是explicit的.因此,我们

【C++ Primer 第十二章】 unique_ptr

unique_ptr • 一个unique_ptr拥有它所管理的对象,与shared_ptr不同,unique_ptr指向的对象只能有一个用户.当unique_ptr被销毁后,它所指向的对象也被销毁. • 与shared_ptr不同,没有类似make_shared_ptr的标准函数返回一个unqiue_ptr,定义一个unique_ptr时,需要将其绑定到一个new返回的指针上,类似shared_ptr,初始化unique_ptr必须采用直接初始化形式: unique_ptr<double>

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!

c++ primer plus(第6版)中文版 第十二章编程练习答案

第十二章编程练习答案 12.1根据以下类声明,完成类,并编小程序使用它 //12.1根据以下类声明,完成类,并编小程序使用它 #include <iostream> #include <cstring> using namespace std; class Cow{ char name[20]; char * hobby; double weight; public: Cow(); Cow(const char * nm, const char * ho, double wt);