服务器之家

服务器之家 > 正文

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

时间:2021-10-25 13:45     来源/作者:流星斩月

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

动态申请内存操作符 new

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

释放内存操作符delete

  • delete 指针p
  • 功能:释放指针p所指向的内存。p必须是new操作的返回值。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//例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;
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
运行结果:
 
Step One:
 
Default Constructor called.
 
Destructor called.
 
Step Two:
 
Constructor called.
 
Destructor called.

分配和释放动态数组

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

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

  • 释放:delete[] 数组名p

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//例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;
 
}
?
1
2
3
4
5
6
7
8
9
10
11
运行结果:
 
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++ 动态内存分配相关总结

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//例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++ 动态内存分配的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/iFrank/archive/2021/02/25/14446859.html

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部

923
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40