我正在阅读Does calling a destructor explicitly destroy an object completely?这个问题,代码中出现了这种情况。

Object* aWidget = new Widget(); //allocate and construct
aWidget->~Object();             //destroy and DON'T deallocate

从答案中,我无法理解在这种情况下实际上并未释放内存区域。我的问题是(出于好奇,比什么都重要):

执行上述两行代码后,如何删除aWidget指向的内存?我认为调用delete aWidget;会失败,因为它会尝试在已被破坏的对象上运行析构函数。您可以调用free(aWidget)或类似的名称来仅针对内存吗?

最佳答案

实际上,free是我的最佳猜测。但是,我认为如果不调用UB,您将无能为力。您如何达到这样调用析构函数的要求?

10-08 12:38