c++ - 函数模板不是普通函数

标签 c++ templates

为什么下面的代码会给我们编译错误:

#include <iostream>
using namespace std;

int i = 0;

struct A
{
    void * operator new [] (size_t t)
    {
        cout << "allocation" << endl;
        return ::operator new[](t);
    }

    template <class T>
    void operator delete [] (void *p, size_t)
    {
        cout << "deallocation" << endl;
        return ::operator delete[](p);
    }
};

int main() 
{
    A *a = new A[10];
    delete [] a;//No suitable deallocation function
}

demo

我认为 function template 只是一个与适当模板相匹配的函数族。这意味着必须在结构定义中找到非放置函数。

最佳答案

您的运算符 delete[] 采用 void*,但有一个模板参数 T,它未用作函数签名,因此编译器无法解析函数调用。

你想要:

void operator delete [] (void *p, size_t);

关于c++ - 函数模板不是普通函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021854/

相关文章:

c++ - QT中小部件的当前大小

c++ - 是否可以将字母 x 放在控制台中央,以 100 像素/秒的速度下降,并在单击时提高 50 像素?

c++ - 如何让标签分派(dispatch)与字符串一起使用?

c++ - 根据模板参数使用不同的函数集(C++ 特征?)

jquery - 使用 Twitter Bootstrap 进行基于网格和堆栈的布局

c++ - 模板函数在作为线程调用时不会编译

c++ - 连续数组多维表示的快速元素访问

c++ - 如何使这个 "template/constexpr"构造更优雅/更简洁?

c++ - 使用 typedef 类型实现函数的 VC++ 类模板

c++ - 如何在多个 Catch2 测试用例中检查相同的条件