C++中创建对象时为何使用指针?指针创建对象方法解析
用指针创建C++对象的详细解释
咱们把代码里两种创建对象的方式拆开对比,就能理清指针创建对象的逻辑:
1. 栈上直接创建对象(p1的方式)
Point p1(10, 15, 20); p1.display();
这行代码是在栈内存里直接生成一个Point类型的对象实例p1,p1本身就是对象实体,所以直接用.调用它的成员函数display()。栈上的对象会在当前作用域结束时(比如main函数执行完毕)自动销毁,不需要手动管理内存。
2. 用指针在堆上创建对象(ptr的方式)
咱们拆解这三行代码的具体作用:
第一步:声明指针变量
Point *ptr;这行只是声明了一个
Point*类型的指针变量ptr,此时ptr里存的是随机的垃圾地址,还没有指向任何有效的Point对象。第二步:在堆上创建对象并让指针指向它
ptr = new Point(50, 60, 70);这里的
new是核心操作:- 在堆内存中申请一块刚好能容纳Point对象的空间;
- 自动调用Point的构造函数,用参数50、60、70初始化这块空间里的对象;
- 返回这块堆内存的地址,把地址赋值给
ptr,此时ptr就成功指向了堆上的新对象。
第三步:通过指针调用成员函数
ptr->display();因为
ptr是指针而非对象本身,所以要用->访问对象的成员(成员变量或函数)。这行等价于(*ptr).display();——先通过*解引用指针得到它指向的堆对象,再用.调用成员函数,->是指针访问成员的简化写法。
额外注意点
堆上创建的对象不会像栈对象那样自动销毁,不再使用时必须手动执行delete ptr;释放内存,否则会造成内存泄漏。比如可以在ptr->display();后添加delete ptr;来清理内存。
内容的提问来源于stack exchange,提问作者KADAM VARSHA
相关产品推荐
相关产品推荐

