C ++确定模板化变量是类还是内置类型?

时间:2014-02-08 04:12:46

标签: c++ templates memory

问题: 我试图显式调用析构函数,但是

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;
}

1 个答案:

答案 0 :(得分:3)

C ++有一个特殊规则,即在模板中调用模板参数类型的析构函数,即使对于内置类型也是如此。此规则旨在简化编写模板。因此,虽然int x; x.~int()无法编译T t; t.~T(),但T = int将编译并且不执行任何操作。