c – 重建堆栈对象

嗯,我知道这听起来很邪恶.我正在阅读
this SO post并偶然发现了重建堆栈对象的技术.基本思路是:

{
    T obj(...);  // dtor will be called at end of scope
    obj.~T();    // YOLO

    new (&obj) T(...);
    // obj goes out of scope. The compiler inserts `obj.~T();` here.
}

…这样我们可以根据需要重复使用相同的内存块.这个代码是否符合标准?像这种未定义的行为一样疯狂吗?

最佳答案 此构造适用于
placement new.

See also.这是标准C.

自第一个标准.它早于第一个标准,并被引入

核心语言因为它的
usefulness.所以不是“疯狂”

当然不是UB本身.当然,你可能会在一个具体的问题中不小心挑起UB或其他内存错误

申请安置新.与提供的所有原始内存管理工具一样

根据语言,现在最好留给标准库的实现者

和第三方图书馆,我们需要与之争吵

风险.

点赞