如何在堆栈上使用Placement new

3
考虑以下代码:

char mem[sizeof(char)];
void* p = mem;
f = new(p) char;

由于变量mem的内存应该在栈上,所以为什么这块内存最终不会自动回收呢。


1
请注意,以下代码不一定适用于所有情况:char mem[sizeof(T)]; new (mem) T();,因为 T 可能有对齐限制,而 mem 无法满足这些限制。 - GManNickG
1个回答

9

内存会自动回收。

但是析构函数不会自动调用。如果您使用放置new,则应该配对手动调用析构函数。当然,对于char来说,这并不重要,因为析构函数是微不足道的。


谢谢你,Ben。这真的帮助我解决了一些关于placement new的问题。 - Jiraiyeah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接