动态持久内存分配

KEY POINT

new操作符可以在运行时为基本数据类型、数组和对象分配持久的内存空间。

另外,新版c++标准中可以用变量名称作为数组大小。

之前创建动态数组的方法

cout<<"Enter the size of the array: ";
int size;
cin>>size;
int* list = new int[size];

就可以被替换为:

cout<<"Enter the size of the array: ";
int size;
cin>>size;
int list[size];

创建及访问动态对象

关键点:调用对象的构造函数可以动态的创建对象,语法是 new ClassNmae(arguments)
可以使用如下的语句在堆中动态创建对象:

ClassName* pObject1 = new ClassName(); //这里使用无参构造函数创建对象,并将对象赋予指针pObject1
ClassName* pObject2 = new ClassName(arguments); //这里使用有参构造函数创建对象,并将对象赋予指针pObject2

通过指针访问对象的数据成员以及成员函数需要先进行解引用操作,然后使用点操作符。

(*pObject1).member = value;
(*pObject1).memberFunction(arguments);

或者使用箭头操作符

pObject1->member = value;
pObject1->memberFunction(arguments);

注意:在使用new操作符创建对象时,必须使用delete操作符来释放内存,否则会造成内存泄漏。

this指针

关键点:this指针是一个隐式的指针,指向当前对象,可以用来访问对象的数据成员和成员函数。

class Circle {
public:
Circle();
Circle(double);
double getArea();
double getRadius();
void setRadius(double);
private:
double radius;
}
Circle::Circle() {
radius = 1;
}
Circle::Circle(double radius) {
this -> radius = radius;//or (*this).radius = radius;
}
double Circle::getArea() {
return 3.14 * radius * radius;
}
double Circle::getRadius() {
return radius;
}

void Circle::setRadius(double radius) {
this -> radius = radius >= 0 ? radius : 0;
}

析构函数

关键点 析构函数没有参数,没有返回值,名字是类名前加上~,一般是释放对象的资源。