[C++] Подробное объяснение нового использования

Оглавление

1. Что нового (Что)

2. Сценарии использования новых (когда и где)

3. Как использовать новое (Как)


1. Что нового (Что)

1. new — ключевое слово, используемое для освобождения пространства.Открытое пространство находится в куче , а обычно объявленные переменные хранятся в стеке;

2.new получает первый адрес пробела . Поэтому для хранения этого адреса обычно необходимо использовать указатель .

new int(10);//返回new出来这块内存的地址

int *p=new int(10);//用一个指针去接受这个地址

cout << p << endl;//返回内存空间地址00995B08

cout << *p << endl;//返回初始值10

delete p;

3. Не забудьте удалить открытое пространство памяти , иначе это приведет к утечке памяти!

delete pКогда: Сначала вызовите деструктор этого объекта, а затем освободите пространство этого объекта.

2. Сценарии использования новых (когда и где)

Методы хранения в C++ примерно следующие:

Статическое хранилище: добавьте ключевое слово static перед переменной при ее объявлении;

Автоматическое сохранение: например, переменная определена и инициализирована в функции A, int a =10; это автоматическое сохранение,

a существует только тогда, когда функция A() активна. Когда управление вернется в функцию main(), память, используемая a, будет автоматически освобождена.

Динамическое хранилище: цикл объявления данных не полностью контролируется временем жизни программы или функции, поэтому в C++ есть новые возможности для выделения пространства. Однако, поскольку память не будет автоматически освобождена, для освобождения необходимо использовать команду delete. память после использования.

Таким образом, new обеспечивает динамическое распределение памяти.


Неприменимые случаи:

New не подходит для частых вызовов, поскольку new будет часто требовать и освобождать память.


Общие сценарии использования следующие:

1. Динамически выделять память для переменных, включая переменные базового типа данных int и double, одномерные массивы, двумерные массивы и т. д.

2. Динамически выделять память для объектов классов, также можно выделять память для структур (классы и структуры схожи);

3. Как использовать новое (Как)

1. Динамическое создание объекта класса

  • Получить кучу памяти;
  • Вызов конструктора;
  • Верните правильный указатель.

Есть класс Car, конструктор — Car(), который создаёт объект этого класса, открывает пространство для хранения и возвращает первый адрес пространства;

Car *Audi = new Car();

delete Audi;

2. Динамическое создание переменной базового типа данных.

  • Получить кучу памяти;
  • Верните правильный указатель.

Конструктора нет, но начальное значение также можно задать в круглых скобках.

new int(10);//返回这个空间的首地址

int *arr=new int(10);//开辟一个存放整数的存储空间,附上初值,返回一个指向该存储空间的地址(即指针)

delete arr;

3. Динамическое создание одномерного массива

char* p = new char[10];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址

delete[] p;

 4. Динамическое создание двумерного массива

//开辟一个存放二维整型数组(大小为3*2)的空间,返回首元素的地址  

int** pc = new int*[3];//这边表示开辟行数为3
//int*[3]表示的为开辟三个存放int*元素的数组,所以才有了下一步pc[i]中对列数的开辟
	for (int i = 0; i < 3; i++)
	{
		pc[i] = new int[2];//这边表示开辟列数为2
		for (int j = 0; j < 2; j++)
		{
			pc[i][j] = i + j;
			cout <<pc[i][j] << " ";
		}
		cout << endl;
	}

//或者使用另一种方法
int(*pc)[2] = new int[3][2];//创建数组指针pc,注:数组指针与二级指针不一样
for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 2; j++)
		{
			pc[i][j] = i + j;
			cout <<pc[i][j] << " ";
		}
		cout << endl;
	} 

delete[] pc;

5. Динамическое создание объекта структуры.

#include<iostream>
using namespace std;
struct MyStruct
{
	int a;
	MyStruct* b;
    MyStruct(int x): a(x), b(NULL) {};  //初始化列表构造函数  函数名与类名相同是构造函数
};
int main() {
	MyStruct* my = new MyStruct();
	delete my;
	system("pause");
	return 0;
}

Guess you like

Origin blog.csdn.net/qq_35902025/article/details/127764973
C++
Recommended