问题: 但是,我正在尝试显式调用析构函数
int a;
class b;
b.~class(); // This works.
a.~int(); // This doesn't.
我的代码是模板化的,所以我需要一种方法来确定它们是否提供了我的基本类型。
例子:
if(!basetype<Class>())
{
classInst.~Class();
}
可能的解决方案: 我可以部分模板化基本类型,这样它就不会调用析构函数,我只是在寻找一种更简单的方法。也许 c++ 有一个内置的运算符,我不知道大声笑。
PS:我爱你。
我的代码:
template<typename DestroyClass>
void HeapAllocator::destroy(HeapPointer<DestroyClass>& object)
{
//object->DestroyClass::~DestroyClass();
// Maintaining linked list references
HeapPointer<EMPTY>* prevIndex = (HeapPointer<EMPTY>*)object.prev;
HeapPointer<EMPTY>* nextIndex = (HeapPointer<EMPTY>*)object.next;
if(prevIndex != 0)
prevIndex->next = (U8*)nextIndex;
else
indexerStart = (U8*)nextIndex;
if(nextIndex != 0)
nextIndex->prev = (U8*)prevIndex;
else{
indexerEnd = (U8*)prevIndex;
if(prevIndex != 0)
allocatorTop = prevIndex->end;
else
allocatorTop = heapBottom;
}
// Nullifying object so it can be overwritten
object.start = 0;
object.end = 0;
object.alignment = 0;
object.prev = 0;
object.next = 0;
}
最佳答案
C++ 有一个特殊的规则,即在模板中调用模板参数类型的析构函数即使对于内置类型也是有效的。这条规则是为了让编写模板更容易。所以虽然 int x; x.~int()
无法编译,T t; t.~T()
在模板中,其中 T = int
将编译并且不执行任何操作。
关于C++ 确定模板化变量是类还是内置类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641797/