重建堆栈对象

时间:2017-01-14 06:31:30

标签: c++ c++11

嗯,我知道这听起来很邪恶。我正在阅读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.
}

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

1 个答案:

答案 0 :(得分:2)

此构造适用placement newSee also。它是标准的C ++ 自第一个标准。它早于第一个标准,并被引入 核心语言,因为它usefulness。所以不要“疯狂” 当然不是UB 本身。当然,你可能会在一个具体的问题中不小心挑起UB或其他内存错误 申请安置新。与提供的所有原始内存管理工具一样 根据语言,现在最好留给标准库的实现者 和第三方图书馆,我们需要与之争吵 风险。