gpt4 book ai didi

c++ - 删除前手动调用析构函数

转载 作者:太空狗 更新时间:2023-10-29 19:57:00 25 4
gpt4 key购买 nike

auto obj = new Object;
obj->~Object();
delete obj;

我知道这很不寻常,但它是定义的行为吗?它会导致任何令人惊讶的问题吗?

最佳答案

你只能这样做如果你用一个新对象替换由obj指向的被破坏的对象,如下所示:

auto obj = new Object;
obj->~Object();

new (obj) Object();
delete obj;

否则,您将调用未定义的行为。


你应该明白:

  • new调用operator new获取内存,然后调用提供的构造函数创建对象
  • delete 调用对象的析构函数,然后调用operator delete 以“返回”内存。


编辑:正如 Bo Persson 所指出的,如果您不能提供异常保证,那不是一个好主意

关于c++ - 删除前手动调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190922/

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