You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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是核心操作:

    1. 在堆内存中申请一块刚好能容纳Point对象的空间;
    2. 自动调用Point的构造函数,用参数50、60、70初始化这块空间里的对象;
    3. 返回这块堆内存的地址,把地址赋值给ptr,此时ptr就成功指向了堆上的新对象。
  • 第三步:通过指针调用成员函数

    ptr->display();
    

    因为ptr是指针而非对象本身,所以要用->访问对象的成员(成员变量或函数)。这行等价于(*ptr).display();——先通过*解引用指针得到它指向的堆对象,再用.调用成员函数,->是指针访问成员的简化写法。

额外注意点

堆上创建的对象不会像栈对象那样自动销毁,不再使用时必须手动执行delete ptr;释放内存,否则会造成内存泄漏。比如可以在ptr->display();后添加delete ptr;来清理内存。

内容的提问来源于stack exchange,提问作者KADAM VARSHA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:27:37