gpt4 book ai didi

c++ - 我是否需要删除使用 new 和 placement 构造的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:25 25 4
gpt4 key购买 nike

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;

关于c++ - 我是否需要删除使用 new 和 placement 构造的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31651775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com