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

 更新时间:2021年02月25日 16:55:05   作者:流星斩月  
这篇文章主要介绍了c++ 动态内存分配相关的相关资料,帮助大家更好的理解和学习和使用c++,感兴趣的朋友可以了解下

  下面随笔是关于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];

//例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++ 动态内存分配的资料请关注脚本之家其它相关文章!

相关文章

  • C语言 OpenCV实现柱面投影

    C语言 OpenCV实现柱面投影

    在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要进行柱面投影,否则离中心图像距离越远的图像拼接后变形越大。本文将具体介绍一下这如何实现,需要的可以参考一下
    2021-12-12
  • Visual Studio 2019 DLL动态库连接实例(图文教程)

    Visual Studio 2019 DLL动态库连接实例(图文教程)

    这篇文章主要介绍了Visual Studio 2019 DLL动态库连接实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 解读C++编译报错有迹可寻

    解读C++编译报错有迹可寻

    这篇文章主要介绍了解读C++编译报错有迹可寻,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • C++类结构体与json相互转换

    C++类结构体与json相互转换

    这篇文章主要介绍的是C++类结构体与json相互转换,json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,下面就随小编一起看下面文章内容吧
    2021-09-09
  • 详解C语言sscanf()函数、vsscanf()函数、vscanf()函数

    详解C语言sscanf()函数、vsscanf()函数、vscanf()函数

    这篇文章主要介绍了详解C语言sscanf()函数、vsscanf()函数、vscanf()函数,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • Qt键盘事件实现图片在窗口上下左右移动

    Qt键盘事件实现图片在窗口上下左右移动

    这篇文章主要为大家详细介绍了Qt键盘事件实现图片在窗口上下左右移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • OpenCV4 实现背景分离的详细步骤(背景减法模型)

    OpenCV4 实现背景分离的详细步骤(背景减法模型)

    背景分离(BS)是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术,本文给大家介绍OpenCV4 实现背景分离的详细步骤,需要的朋友可以参考下
    2021-09-09
  • C++实现defer声明方法详解

    C++实现defer声明方法详解

    这篇文章主要介绍了C++实现defer声明,在和朋友交谈时候,无意间了解到Go语言的defer,发现挺有意思的。和智能指针类似,当出了作用域后,被defer修饰的操作才会执行
    2022-11-11
  • C++实现单例模式的方法

    C++实现单例模式的方法

    这篇文章主要为大家介绍了C++实现单例模式的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • VisualStudio2019配置OpenCV4.5.0的方法示例

    VisualStudio2019配置OpenCV4.5.0的方法示例

    这篇文章主要介绍了VisualStudio2019配置OpenCV4.5.0的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论