动态内存分配[1]
动态申请内存操作符 new
new 类型名T(初始化参数列表)
功能:
在程序执行期间,申请用于存放T类型对象的内存空间,并依初值列表赋以初值。
结果值:
成功:T类型的指针,指向新分配的内存;失败:抛出异常(异常在十二章讲解)。
释放内存操作符delete
delete 指针p
功能:释放指针p所指向的内存。p必须是new操作的返回值。
例6-16 动态创建对象举例
#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;}
主要:new和delete 一定要配合使用
删除(delete)是删除这个指针所指向的对象,释放它的空间。绝对不是删除指针自己。比如此例中:这个指针变量它还在,在第二步后ptr1它可以接收别的赋值。
所以不是删除指针自己,这个指针是主函数的一个局部变量,当主函数运行结束时,这个指针自己的空间也会被释放。