is_thinking 2016-08-06 14:07 采纳率: 66.7%
浏览 1495
已采纳

new与delete的应用场景是什么?

C++中new运算符是创建了一个新的对象,比如

int *p = new() int(10);
int *q = 10

两个都是int型指针,初始化的值也一样,所以我的问题是他们两个什么区别呢?new的应用
场景在哪里?我感觉不用new也可以吧,请指点一下,谢谢。

  • 写回答

5条回答 默认 最新

  • keshuilongcs 2016-08-09 03:22
    关注

    int *p = new() int(10);
    这个是申请一片内存区域,保存一个int对象,p指向该int对象的首地址;
    int *q = 10;
    这个语句应该有点问题写成这样 int *q = (int *)10;意思是定义一个int型指针q,并将q所指向的内存地址强制设置为10。

    造成的结果是,如果输出的话 对于p,*p的值为10 ,而p所指向的内存地址不固定,而对于q,q的值为10,而*q一般访问会出错;
    采用Vs运行情况如下:
    图片说明
    继续单步运行会导致程序崩溃;

    q指针这种用法一般用在已经有了某个对象,直接将新申请的指针指向该对象。通过指针传递参数。

    至于new,申请的内存空间位于堆中,需要手动释放或者程序结束时会自动释放,new之后会调用构造函数或者拷贝构造函数;前者这样的形式:
    A *Pa1 = new A;
    后者一般是这样的形式 :
    A a;
    A *pA2 = new A(a);
    第二种方式不建议用因为容易造成内存泄漏。

    至于delete,可以释放new申请的内存,一般当new所产生的指针不再使用时,调用delete 指针;释放指针所指向的内存地址。

    个人观点,如有错误,欢迎改正。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!