问题: 我试图显式调用析构函数,但是
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;
}
答案 0 :(得分:3)
C ++有一个特殊规则,即在模板中调用模板参数类型的析构函数,即使对于内置类型也是如此。此规则旨在简化编写模板。因此,虽然int x; x.~int()
无法编译T t; t.~T()
,但T = int
将编译并且不执行任何操作。