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

Using malloc in a constructor of a templated class

本文关键字:malloc 构造函数      更新时间:2023-10-16

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

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

通过这样做,我得到以下编译器错误:

没有依赖于模板的"malloc"参数 参数,因此必须提供"malloc"的声明(如果使用 "-fallowive",G++ 将接受您的代码,但允许使用 未声明的名称已弃用)

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

看起来你缺少#include <cstdlib>#include <stdlib.h>.编译器抱怨缺少声明。这些包含文件提供了一个。

编译器错误告诉您它没有声明malloc是什么。您缺少声明该函数的包含。

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