【发布时间】:2017-08-02 18:49:51
【问题描述】:
我正在练习一些 C++,我很困惑为什么我需要为对象数组(例如节点结构)使用双指针。这是一个简单的代码sn-p来解释我的情况:
struct HashNode{
HashNode* next;
int data;
int key;
int hashCode;
HashNode::HashNode(
HashNode* next,
const int& data,
const int& key,
const int& hashCode
) : next(next), data(data), key(key), hashCode(hashCode)
{}
};
class HashMap{
public:
HashMap();
HashMap(int tableSize);
~HashMap();
private:
//Here is the double pointer
HashNode** table;
};
HashMap::HashMap(){
//Here is the array initialization
table = new HashNode*[100];
}
我已经删除了问题不需要的代码。
如果我这样删除双指针:
HashNode* table;
和
table = new HashNode[100];
我收到以下错误。
hashmap.cpp: In method `HashMap::HashMap()':
hashmap.cpp:87: no matching function for call to `HashNode::HashNode ()'
hashmap.cpp:61: candidates are: HashNode::HashNode(const HashNode &)
hashmap.cpp:58: HashNode::HashNode(HashNode *, const int &, cons
t int &, const int &)
这表明 HashNode 尝试运行构造函数。
如果我只将数组的初始化更改为table = new HashNode*[100];,同时保留HashNode* table;,则会出现以下错误。
hashmap.cpp: In method `HashMap::HashMap()':
hashmap.cpp:87: assignment to `HashNode *' from `HashNode **'
我的假设是,当我创建一个对象数组时,我需要对象的生命周期与程序的持续时间一样。这需要我对对象和数组使用指针。因此,我需要数组的双指针,因为它指向指针,我需要对象的指针。
但是,我仍然不确定,我在网上找不到任何好的解释。有人可以解释一下这种情况吗?
【问题讨论】:
-
您需要阅读good C++ book
-
在这里问这个问题不好吗?我认为这是一个很好的例子,但我没有掌握这个概念。我会看书谢谢!
-
format这个问题还不错,只是琐碎而已。有一个特殊要求没有得到满足:在询问之前尽可能多地进行研究
标签: c++ pointers double-pointer