0%

C++之对象的动态创建和销毁

使用new语句为自定义类型的对象分配存储空间. 只需要将变量声明为指向自定义类型对象的指针, 再利用new语句分配内存就可以了.

使用new语句来创建类对象的语法如下:

new 类型名
或
new 类型名(初始值列表)

例如, 使用new创建一个Person类的对象:

Person *p = new Person(10,"xiaoming");

上面的p是一个指针, 指向一段存储Person对象的内存空间. 可以使用sizeof操作符检测对象在内存中所占用的存储空间大小:

cout << sizeof(*p) << endl;
cout << sizeof(Person) << endl;

使用new语句创建对象也会调用 类的构造方法, 如果调用无参数的构造函数, 则有以下两种方式:

Person *a = new Person;
Person *b = new Person();

利用new语句也可以建立存储对象的数组.

int main(){
    int num = 5;
    Person *p = new Person[num];
    return 0;
}	

上面的代码生成了一个能存储num个Person对象的数组. 数组中每个对象都可以利用运算符[]进行访问, 其中每个p[i]都代表了一个Person对象.

C语言中malloc语句和free语句相对应. 类似地, C++中new对应的运算符为delete, 用来释放new分配的内存. 对象被释放时, 也将调用对象的析构函数.

Person *c = new Person();
delete c;

使用delete还可以清除new分配的对象数组, 但此时需要在delete后加上运算符[], 编译器将自动计算数组大小并调用每个对象的析构函数销毁对象.

delete[] p;	

注意, 利用new生成对象只能由delete释放,不能用free. 当对象离开其相应的作用域时, 程序将调用其析构函数, 利用delete释放对象时析构对象也会被调用.