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

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

最佳答案

C++ 有一个特殊的规则,即在模板中调用模板参数类型的析构函数即使对于内置类型也是有效的。这条规则是为了让编写模板更容易。所以虽然 int x; x.~int() 无法编译,T t; t.~T() 在模板中,其中 T = int 将编译并且不执行任何操作。

关于C++ 确定模板化变量是类还是内置类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641797/

相关文章:

c++ - 使用 OpenCV 从一组 2D 图像切片重建 3D 模型?

c++ - 模板基类类型定义和函数的更好 C++ 语法?

r - 计算 R 函数的最大内存需求

c++ - 将 1 和 0 的字符串转换为二进制值

c++ - GCC 和 clang 上的构造函数调用顺序不同

c++ - 什么是 std::mbstate_t?

c++ - C++ 模板特化中声明的范围

xml - 使用 Ansible 在 Jinja2 中转义特殊 XML 字符

将 char 数组复制到另一个 char 数组而不发生内存泄漏

c - 更新 C 库,导致堆损坏