考虑以下代码:
char mem[sizeof(char)];
void* p = mem;
f = new(p) char;
由于变量mem的内存应该在栈上,所以为什么这块内存最终不会自动回收呢。
char mem[sizeof(char)];
void* p = mem;
f = new(p) char;
由于变量mem的内存应该在栈上,所以为什么这块内存最终不会自动回收呢。
内存会自动回收。
但是析构函数不会自动调用。如果您使用放置new
,则应该配对手动调用析构函数。当然,对于char
来说,这并不重要,因为析构函数是微不足道的。
char mem[sizeof(T)]; new (mem) T();
,因为T
可能有对齐限制,而mem
无法满足这些限制。 - GManNickG