第21讲 new/delete关键字
new关键字
在
C++
中,
new
关键字用于动态分配内存。它是
C++
中处理动态内存分配的主要工具之一,允许在程序运行时根据需要分配内存。
用法
①分配单个对象:使用 new 可以在堆上动态分配一个对象。例如, new int 会分配一个 int 类型的空间,并返回一个指向该空间的指针。
int* ptr = new int; //C语言中,int *p = (int *)malloc(sizeof(int));
cout<<sizeof (*ptr)<<endl;
②分配对象数组: new 也可以用来分配一个对象数组。例如, new int[10] 会分配一个包含10个整数的数组。
int *arr=new int[10];
arr[0]=0;
③初始化:可以在 new 表达式中使用初始化。对于单个对象,可以使用构造函数的参数:
语法:
MyClass* obj = new MyClass(arg1, arg2);
示例:
#include <iostream>
#include <string.h>
using namespace std;
class Person
{
private:
string name;
int age;
public:
void printInfo(void);
Person(string myName,int myAge)
{
this->name=myName;
this->age=myAge;
}
};
void Person::printInfo(void)
{
cout<<"person's name:"<<this->name<<endl;
cout<<"person's age:"<<this->age<<endl;
}
int main()
{
Person* p1=new Person("Mike",18);
(*p1).printInfo();
return 0;
}
delete关键字
使用
new
分配的内存必须显式地通过
delete
(对于单个对象)或
delete[]
(对于数组)来释放,以避免内存泄露。
用法
①释放单个对象
delete ptr; // 释放 ptr 指向的对象
示例:
int main()
{
Person* p1=new Person("Mike",18);
(*p1).printInfo();
delete p1;
return 0;
}
②释放数组
delete[] arr; // 释放 arr 指向的数组
示例:
int *arr=new int[10];
delete[] arr;
注意事项
异常安全
:如果
new
分配内存失败,它会抛出
std::bad_alloc
异常(除非使用了
nothrow 版本
)。
内存泄露
:忘记释放使用
new
分配的内存会导致内存泄露。
匹配使用
delete
和
delete[ ]
:为避免未定义行为,使用
new
分配的单个对象应该使用
delete
释放,使用
new[ ]
分配的数组应该使用
delete[ ]
释放。
第22\23讲 拷贝构造函数与析构函数
参考拙作:C++语法补习课——对象特性-优快云博客
第24讲 静态成员
定义
静态成员在
C++
类中是一个重要的概念,它包括静态成员变量和静态成员函数。静态成员的特点和存在的意义如下:
静态成员变量
1.
定义
:静态成员变量是类的所有对象共享的变量。与普通成员