嗯,我知道这听起来很邪恶.我正在阅读
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或其他内存错误
申请安置新.与提供的所有原始内存管理工具一样
根据语言,现在最好留给标准库的实现者
和第三方图书馆,我们需要与之争吵
风险.