在模板化类的构造函数中使用malloc

时间:2012-05-08 12:33:04

标签: c++ templates malloc

假设我有一个用于创建树或列表结构的类。我们称之为

template <typename K, typename V>
class Node{
  // some data
  Node<K,V>* next;
  Node() {
    next = static_cast<Node<K,V>*>( malloc( sizeof(Node<K,V>) ));
  }
};

通过执行此操作,我收到以下编译器错误:

  

没有任何关于&#39; malloc&#39;这取决于模板   参数,所以&#39; malloc&#39;必须是可用的(如果你使用   &#39; -fpermissive&#39;,G ++将接受您的代码,但允许使用   未声明的名称已弃用)

有没有办法以这种方式使用malloc而不必使用弃用的代码?我想使用malloc而不是new,因为我想在那里做更高级的内存管理。

2 个答案:

答案 0 :(得分:8)

您似乎缺少#include <cstdlib>#include <stdlib.h>。编译器抱怨缺少声明。那些包含文件提供了一个。

答案 1 :(得分:3)

编译器错误告诉您它没有malloc的声明。您缺少声明该函数的include。

除此之外,这种方法被打破了。您正在编写通用树,但由于使用malloc,您将限制使用POD类型(我假设KV存储在Node中})。您应该使用new代替调用该类型的构造函数,而不仅仅是分配内存。