我是否需要删除使用 new 和 placement 构造的对象
Do i need to delete a object that was constructed with new and placement
class Foo{
//some member
public:
int bar;
}
int main(){
char* buffer = new char[100];
Foo* f = new(buffer)Foo();
//do i have to
delete f;
//or is
delete[] buffer;
//enough
}
当然,如果 Foo
的删除对系统有一些重大影响,我必须删除它,但可以说它是一个简单的存储对象,我将其完全放在缓冲区内并且没有解构器这确实删除了一些其他的东西。
- 我是否必须删除一个放置在新内部的对象
缓冲区的大小还是足以删除缓冲区?
- 如果我必须对缓冲区内的每个对象调用 delete,为什么
我必须这样做吗?
我读到:what-uses-are-there-for-placement-new 他也说
You should not deallocate every object that is using the memory buffer. Instead you should delete[] only the original buffer.
销毁该对象的正确方法是使用显式析构函数调用:
f-> ~Foo();
通常 placement new 与堆栈上的内存一起使用。在这种情况下,它是堆分配,因此您需要使用与 new
.
匹配的 delete
形式释放缓冲区
delete[] buffer;
class Foo{
//some member
public:
int bar;
}
int main(){
char* buffer = new char[100];
Foo* f = new(buffer)Foo();
//do i have to
delete f;
//or is
delete[] buffer;
//enough
}
当然,如果 Foo
的删除对系统有一些重大影响,我必须删除它,但可以说它是一个简单的存储对象,我将其完全放在缓冲区内并且没有解构器这确实删除了一些其他的东西。
- 我是否必须删除一个放置在新内部的对象 缓冲区的大小还是足以删除缓冲区?
- 如果我必须对缓冲区内的每个对象调用 delete,为什么 我必须这样做吗?
我读到:what-uses-are-there-for-placement-new 他也说
You should not deallocate every object that is using the memory buffer. Instead you should delete[] only the original buffer.
销毁该对象的正确方法是使用显式析构函数调用:
f-> ~Foo();
通常 placement new 与堆栈上的内存一起使用。在这种情况下,它是堆分配,因此您需要使用与 new
.
delete
形式释放缓冲区
delete[] buffer;