来自《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)。
又学到了一个永远用不着的知识。