定位new表达式

来自《c++ Primer》19.1.2章节

一般使用new运算符时会在堆内存申请一块内存空间并将地址赋给指针。这个地址是不能由用户确定的。

所谓定位new表达式是指使用new运算符后返回的是已知的用户指定的地址,不管它是否已经被使用,而且可以看到新值直接覆盖在旧值上面。

    int a = 10;
    qDebug()<<&a;
    QString * s = new(&a)QString;
    *s = "xxx";
    qDebug()<<*s<<s;
    s->~QString();

这里在栈内存定义一个变量a。然后定义一个字符串指针,该指针的地址是a的地址,字符串使用了a的地址。用“xxx”覆盖掉了“10”。

前后两个地址相同的,这里new不一定是在堆内存,所以不能用delete,要显示调用析构函数释放对象。(如果在堆内存 int * a,则要delete a)。

又学到了一个永远用不着的知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值