动态数组实现Point对象栈类
1.new
运算符new
的功能是动态分配内存,或者称为动态创建堆对象,语法形式为
new 数据类型(初始化参数列表);
如
int *point;
point = new int(2);
动态分配了用于存放int
类型数据的内存空间,并将初值2存入该空间中,然后将首地址赋给指针point
。
new
也可以创建数组类型对象,这时需要给出数组的结构说明。用new
运算符创建一维数组的语法形式为
new 类型名[数组长度]
如创建一个整型动态数组
int *p = new int[10]();
2.delete
运算符delete
用来删除由new
建立的对象,释放指针所指向的内存空间。格式为
delete 指针名
如果是用new
建立的数组,用delete
删除时在指针名前面要加[]
,格式如下
delete[] 指针名
用
new
分配的内存,必须用delete
加以释放,否则会导致动态分配的内存无法回收,使得程序占据的内存越来越大,这叫做“内存泄漏。对同一内存空间多次使用delete
进行删除会导致运行错误。
可以将数组的建立和删除过程封装起来,形成一个动态数组类。如实现一个Point对象栈类。
Point类定义
class Point{
public:
Point():x(0),y(0){}
Point(int x, int y):x(x),y(y){}
Point(Point &p){
x = p.x;
y = p.y;
}
~Point(){}
int getX() const{
return x;}
int getY() const{
return y;}
void move(int newX, int newY){
x = newX;
y = newY;
}
private:
int x, y;
};
StackOfPoints类定义
class StackOfPoints{
public:
StackOfPoints(int size):size(size){
points = new Point[size]; // new建立动态数组,长度为size
}
~StackOfPoints(){
delete[] points; // delete删除动态数组
}
void Push(Point p){
if(coun