1:当申请一块堆内存后,系统不会再程序执行时一句情况自动销毁它.若想释放该内存,则需要使用delete关键字.下面的代码中,可以看出堆和栈的不同.代码如下: // 5.12.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using std::cout; using std::endl; int* newPointerGet(int* p1)//返回地址,参数也为地址 { ; p1 =new i…
12.动态内存和智能指针 1.智能指针分为两种shared_ptr和unique_ptr,后者独占所指向的对象.智能指针也是模板,使用时要用尖括号指明指向的类型.类似emplace成员,make_shared用其参数来构造给定类型的对象.(make_shared创建一个对象并将之初始化,返回一个指向该类型的指针. 2.每个智能指针都有一个关联的计数器,称为引用计数,用来记录有多少个shared_ptr指向相同得对象3.p.use_count(),当计数值为零时,其析构函数将自动释放对象和相关联的…
1:正确的步骤应该是如下代码所示: // 5.15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> void swap(int* a,int* b) { int temp = *a; *a = *b; *b = temp; } int main() { int* pI =new int; *pI = ; ; swap(pI,&k); std::cout<<"*pI:…
1:当指针所指向的内存被销毁时,该区域不可复用.若有指针指向该区域,则需要将该指针置为空值(NULL)或者指向未被销毁的内存. 内存销毁实质上是系统判定该内存不是变成人员正常使用的空间,系统也回将它们分配给别的任务.若擅自使用被销毁内存的指针更改该内存的数据,很可能会造成意向不到的后果. 代码实例如下: // 5.13.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using std::cou…
1:在程序中定义一个变量,它的值会被放入内存中.如果没有申请动态分配,它的值将会被放在栈中.栈中的变量所属的内存大小是无法被改变的,它们的产生与消亡也与变量定义的位置和存储方式有关.堆是一种与栈相对应的动态分配方式的内存.当我们申请使用动态分配方式存储某个变量时,这个变量就会被放入堆中.根据需要,这个变量的内存大小可以发生改变. 2:在创建变量之前,编译器并没有获取到变量的名称,而只是具有指向该变量的指针.这时申请变量的堆内存即申请自身指向堆.new是C++语言中申请动态内存的关键字,形式如下:…
1:代码如下: // 5.10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using std::cout; using std::endl; int* pointerGet(int* p)//定义一个返回指针类型的函数 { ; cout<<"函数体中i的地址"<<&i<<endl; cout<<"函数体中…
1:有时在获得一定的信息之前,我们并不确定数组的大小.动态分配数组则可以使用变量作为数组的大小,使数组的大小符合我们的要求. 2:科普一下斐波纳契数列:斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........这个数列从第3项开始,每一项都等于前两项之和. 代码如下: // 6.18.cpp : 定义控制…
1:代码如下: // 5.14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; int main() { float* pF = NULL; pF = new float; *pF = 4.321f; float f2 = 5.321f; cout<<"pF指向的地址:"<<pF<<endl; co…
1:以a[4][3]为例 a代表二维数组的地址,通过指针运算符可以获取数组中的元素 (1)a+n代表第n行的首地址 (2)&a[0][0]既可以看作第0行0列的首地址,同样也可以被看作是二维数组的首地址.&a[m][n]就是第m行n列元素的地址 (3)&a[0]是第0行的首地址,当然&a[n]就是第n行的首地址 (4)a[0]+(n-1)表示第0行第n个元素 (5)*(*(a+n)+m)表示第n行第m列 (6)*(a[n]+m)表示第n行第m列元素 2:代码如下: // 6…
1:多态性是面向对象程序设计的一个重要特征,利用多态性可以设计和实现一个易于扩展的系统.在C++语言中,多态是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,发出同样的消息被不同类型的对象接受时,将导致完全不同的行为.这里所说的消息主要是指类的成员函数的调用,而不同的行为是指不同的实现. 多态通过联编实现.联编是指一个计算机程序自身彼此关联的过程.按照联编说进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编.C++中,根据两边的时刻不同,有两种类型的多…