重建堆栈对象
Reconstructing stack object
嗯,我知道这听起来很邪恶。我正在阅读这篇SO帖子,偶然发现了重建堆栈对象的技术。基本思想是:
{
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.
}
。这样我们就可以根据需要多次重复使用相同的内存块。按照标准,此代码是否合法?疯狂是这种不确定的行为吗?
此构造应用放置 new。另请参阅。这是标准C++自第一个标准以来。它早于第一个标准,并被引入核心语言,因为它有用。所以不是"疯狂"自然不是UB本身。当然,您可能会不小心在混凝土中挑起UB或其他内存错误安置新申请。与提供的所有原始内存管理工具一样根据语言,现在最好留给标准库的实现者和 3rd 方库,这些库预先满足了我们与其争论的需要风险。
相关文章:
- C++ 在堆栈中包含多态属性的类对象存储
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- C++ 对象数组堆栈溢出
- 作为指针注入类后重新创建堆栈对象不好吗?
- C++包装库:在堆栈上分配C++ C 中的对象
- 对象接收堆栈溢出异常 c++ 的排序向量
- C++析构函数调用两次,堆栈分配的复合对象
- 如何在构建对象堆栈时解决转换错误?
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- C++ - 面试问题中的堆栈上的对象
- 堆还是堆栈用于创建对象?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- 对象向量是否在堆或堆栈上分配C++?
- 使用在堆栈上创建的对象调用虚拟函数
- 如果我使用malloc()而不是堆栈数组,OpenGL不会渲染对象
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 模板堆栈对象的数组;语法
- 小对象堆栈存储,严格混叠规则和未定义行为