我是C ++的新手,但有一些Java经验。 我会用Java做到这一点:
public Class SymbolTable{
private DynHashtable<String> hst;
public SymbolTable(){
hst = new DynHashtable<String>();
}
}
但是我不知道如何在C ++中做到这一点,我应该保留一个指向DynHashtable的指针,还是应该保留它的Object,或者没有区别?
答案 0 :(得分:3)
在这种情况下,我猜你不需要保留任何指针。为您的数据成员自动存储持续时间。它将在构造包含它的SymbolTable
对象时构造,并在SymbolTable
对象被破坏时被破坏。
换句话说,SymbolTable
完全封装并拥有DynHashtable<string>
对象,负责控制其生命周期。
此外,在C ++中,您应该使用std::string
来表示字符串(您必须包含<string>
标准标头才能导入其定义:
#include <string>
class SymbolTable {
private:
DynHashtable<std::string> hst;
public:
SymbolTable() {
// ...
}
};
<强>更新强>
从评论中看来,DynHastable
似乎不是默认构造的,并且其构造函数接受int
作为其参数。在这种情况下,您必须在构造函数的初始化列表中构造对象:
class SymbolTable {
private:
DynHashtable<std::string> hst;
public:
SymbolTable() : hst(42) {
// ^^^^^^^^^
// ...
}
};
答案 1 :(得分:1)
在C ++中,您通常直接为变量语义嵌入变量,或者使用std::shared_ptr
作为引用语义。这里的价值语义:
#include <string>
#include <unordered_set> // the equivalent of DynHashtable AFAICT
class SymbolTable
{
private:
std::unordered_set<std::string> hst;
public:
SymbolTable() // automatically calls the default ctor for hst
{
}
};
以及这里的参考语义:
#include <string>
#include <unordered_set> // the equivalent of DynHashtable AFAICT
#include <memory> // for std::shared_ptr / std::make_shared
class SymbolTable
{
private:
std::shared_ptr<std::unordered_set<std::string>> hst;
public:
SymbolTable()
: hst(std::make_shared<std::unordered_set<std::string>>())
{
}
};
但您通常需要定义更多方法,例如copy-ctor,赋值运算符等。