十三、动态对象创建(Dynamic Object Creation)

十三、动态对象创建(Dynamic Object Creation)

目录

  • 13.1 对象创建(Object creation)
  • 13.2 new / delete 操作符
  • 13.3 数组的 newdelete
  • 13.4 总结

背景说明

  • 有时候我们需要知道程序中对象的数量、类型和声明周期,但并不总是如此

  • 为了应对一般编程问题,必须能够在运行时创建和销毁对象。

  • 存储区域可以粗略分为三部分

    • 静态存储区域

    • 动态内存分配(堆,heap)

  • 这里要讲到的动态内存分配就是使用newdelete

13.1 动态对象创建

创建一个C++对象时,会发生两个事件:

  • 为该对象分配存储空间
    • 静态存储区
    • 堆(动态内存分配)
  • 调用构造函数来初始化这块存储区域

13.2 操作符 new / delete

语法格式

new type(initializer); //创建一个动态的对象
delete pointername;//销毁一个动态对象

new type 没有 initializer,意味着参数为默认参数或者无参数。

示例1

MyType* p =  new MyType(1,2);
MyType* fp = new MyType;
delete p;
delete fp;

示例2

#include <iostream>
using namespace std;
class Tree{
    int height;
public:
    Tree(int treeHeight = 0):height(treeHeight){}
    void print(){cout << height << endl;}
};
void main(){
    Tree* t = new Tree(40);
    t->print();
    delete t;
}

输出

40

13.3 new / delete 数组

语法格式

new type[size];
delete []pointername;

示例1

MyTree *fp = new MyTree[100];
delete []fp;

示例2

#include <iostream>
using namespace std;
class Tree {
    int height;
public:
    Tree(int treeHeight = 0) :height(treeHeight) { cout << "Constructor:" << height << endl; }
    void print() { cout << height << endl; }
};

void main()
{
    Tree* t = new Tree[3];
    t[2] = Tree(40);
    t[2].print();
    delete[]t;
}
  • new / new[] 返回一个指向指定类型的指针。
  • new 创建的对象必须通过 delete 来销毁。
  • 指针只能被 deletedelete [] 销毁一次

13.4 总结

  • 使用new / delete 创建和销毁一个对象
  • 使用new[] / delete [] 创建和销毁一个数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值