c/c++语言开发共享c++ 动态内存分配相关总结

下面随笔是关于c++动态内存分配。动态申请内存操作符new new类型名t(初始化参数列表) 功能:在程序执行期间,申请用于存放t类型对象的内存空间,并依初值列表赋以初值。 结果值:成功:t类型

  下面随笔是关于c++动态内存分配。

动态申请内存操作符 new

  • new 类型名t(初始化参数列表)
  • 功能:在程序执行期间,申请用于存放t类型对象的内存空间,并依初值列表赋以初值。
  • 结果值:成功:t类型的指针,指向新分配的内存;失败:抛出异常。

释放内存操作符delete

  • delete 指针p
  • 功能:释放指针p所指向的内存。p必须是new操作的返回值。
  //例1 动态创建对象举例    #include <iostream>    using namespace std;    class point {    public:    point() : x(0), y(0) {      cout<<"default constructor called."<<endl;    }    point(int x, int y) : x(x), y(y) {      cout<< "constructor called."<<endl;    }    ~point() { cout<<"destructor called."<<endl; }      int getx() const { return x; }      int gety() const { return y; }      void move(int newx, int newy) {        x = newx;        y = newy;    }    private:    int x, y;    };    int main() {      cout << "step one: " << endl;      point *ptr1 = new point; //调用默认构造函数      delete ptr1; //删除对象,自动调用析构函数      cout << "step two: " << endl;      ptr1 = new point(1,2);      delete ptr1;      return 0;    }

  运行结果:    step one:    default constructor called.    destructor called.    step two:    constructor called.    destructor called.

分配和释放动态数组

  • 分配:new 类型名t [ 数组长度 ]

数组长度可以是任何表达式,在运行时计算

  • 释放:delete[] 数组名p

释放指针p所指向的数组。
p必须是用new分配得到的数组首地址。

  //例2 动态创建对象数组举例    #include<iostream>    using namespace std;    class point { //类的声明同例6-16,略 };    int main() {      point *ptr = new point[2]; //创建对象数组      ptr[0].move(5, 10); //通过指针访问数组元素的成员      ptr[1].move(15, 20); //通过指针访问数组元素的成员      cout << "deleting..." << endl;      delete[] ptr; //删除整个对象数组      return 0;    }

  运行结果:    default constructor called.    default constructor called.    deleting...    destructor called.    destructor called.

动态创建多维数组

new 类型名t[第1维长度][第2维长度]…;

如果内存申请成功,new运算返回一个指向新分配内存首地址的指针。

  例如:

  char (*fp)[3];

  fp = new char[2][3];

c++ 动态内存分配相关总结

  //例3 动态创建多维数组    #include <iostream>    using namespace std;    int main() {      int (*cp)[9][8] = new int[7][9][8];      for (int i = 0; i < 7; i++)        for (int j = 0; j < 9; j++)          for (int k = 0; k < 8; k++)            *(*(*(cp + i) + j) + k) =(i * 100 + j * 10 + k);      for (int i = 0; i < 7; i++) {        for (int j = 0; j < 9; j++) {          for (int k = 0; k < 8; k++)            cout << cp[i][j][k] << " ";            cout << endl;        }        cout << endl;      }      delete[] cp;      return 0;    }

以上就是c++ 动态内存分配相关总结的详细内容,更多关于c++ 动态内存分配的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/596034.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐