【发布时间】:2012-05-08 12:33:04
【问题描述】:
假设我有一个类将用于创建树或列表结构。让我们称之为
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'的声明必须可用(如果你使用 '-fpermissive',G++ 将接受您的代码,但允许使用 不推荐使用未声明的名称)
有没有办法以这种方式使用 malloc 而不必使用已弃用的代码?我想使用 malloc 而不是 new 因为我想做一些更高级的内存管理。
【问题讨论】:
-
这是一个不寻常的
Node类。您似乎是一个自动分配下一个节点的链表节点,在正常情况下会导致无限递归,但实际上您使用的是malloc,它不会调用您正在创建的对象的构造函数停止递归。我不确定这是否真的很聪明。 -
你确定你不只是缺少包括 cstdlib 吗? (并说
std::malloc?) -
听起来你没有包含声明 malloc 函数的 stdlib.h。