-1

我在 C++ 中声明 HashTable 变量时遇到问题。在java语言中,我们可以声明HashTable变量,比如

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

但我尝试HashTable在 C++ 中声明,如下所示的代码,并在这些代码中出现错误:-

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

我不知道如何解决这个问题,谁能教我解决这个问题的方法。谢谢你。

4

2 回答 2

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在完成动态分配的对象后显式调用。

于 2013-10-03T07:36:43.023 回答
0

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

hash_map<char* key, char* value> map; //map is empty
map["a"]= "The value of a";
于 2013-10-03T07:36:27.993 回答