2013-10-03 75 views
-1

我在C++中声明HashTable变量时遇到问题。在Java语言中,我们可以声明HashTable变量,像如何在C++中声明HashMap类型

Hashtable<String, sqlStat> pool = new Hashtable<String, sqlstat>(30); 

但我尝试在C如下声明HashTable ++,如代码显示,并与代码得到一个错误: -

std::unordered_map<string, sqlstmt*> abc = new std::unordered_map<string, sqlstmt*>(30); 

我有没有想法解决这个问题任何人都可以教我一个解决方案来解决这个问题。谢谢。

+4

C++不是java,不使用新的如果不指向指针 – RamonBoza

+0

我仍然在模糊。你能给我一个简单的示例代码? – tontontv

+0

是的,看答案 – RamonBoza

回答

1

new只需要动态分配,结果是一个指针,所以它需要被分配给一个指针变量或反馈给一个接受指针的对象。在C++中,您可以声明本地作用域实例,而不使用new。在你的情况,只留下了new ...出来:

std::unordered_map<string, sqlstmt*> abc; 
abc["query"] = new sqlstmt(...); 

从Java的到来,使用动态分配的时候,你应该采取使用智能指针,而不是裸指针。

std::unordered_map<string, std::shared_ptr<sqlstmt> > abc; 
abc["query"] = std::make_shared<sqlsmt>(...); 

这样您就可以在没有更多引用对象时自动获取内存获取行为。 Java默认给你这种行为。在C++中,您使用智能指针来获取该行为。如果没有智能指针,当您完成动态分配的对象时,您必须显式调用delete

+0

我得到一个错误'unordered_map命名空间'std'没有命名一个类型。 – tontontv

+0

使用[C++参考](http://en.cppreference.com/w/cpp/container/unordered_map)。你需要'#include '。 – jxh

+0

对于'shared_ptr',你需要'#include '。 – jxh

0

只是取得联系,您需要使用STL,

hash_map<char* key, char* value> map; //map is empty 
map["a"]= "The value of a"; 
+0

hash_map不是标准的;虽然是普通的C++ 11之前的版本。 C++ 11有unordered_map;因为hash_map实现不同,所以决定重命名为unordered_map。 – Bathsheba

+0

你是对的:) – RamonBoza