0

私は C++ は初めてですが、Java の経験はある程度あります。私はJavaでこれを行います:

public Class SymbolTable{
   private DynHashtable<String> hst;
   public SymbolTable(){
      hst = new DynHashtable<String>();
   }
}

しかし、C ++でそれを行う方法がわかりません。DynHashtableへのポインターを保持する必要がありますか、それともオブジェクトを保持する必要がありますか?それとも違いはありませんか??

4

2 に答える 2

3

この場合、ポインターを保持する必要はないと思います。データ メンバーに自動保存期間を指定します。それSymbolTableを含むオブジェクトが構築されると構築され、SymbolTableオブジェクトが破棄されると破棄されます。

言い換えればSymbolTable、オブジェクトを完全にカプセル化して所有し、DynHashtable<string>その存続期間を制御する排他的な責任を負います。

また、C++ では、std::string文字列を表すために を使用する必要があります (<string>その定義をインポートするには、標準ヘッダーを含める必要があります。

#include <string>

class SymbolTable {
private:
    DynHashtable<std::string> hst;

public:
    SymbolTable() {
        // ...
    }
};

アップデート:

コメントから、それDynHastableはデフォルトで構築可能ではないようであり、そのコンストラクターはintパラメーターとして an を受け入れます。この場合、コンストラクターの初期化リストでオブジェクトを構築する必要があります。

class SymbolTable {
private:
    DynHashtable<std::string> hst;

public:
    SymbolTable() : hst(42) {
    //            ^^^^^^^^^
        // ...
    }
};
于 2013-04-06T13:40:08.520 に答える
1

C++ では、通常、値セマンティクスのために変数を直接埋め込むか、std::shared_ptr参照セマンティクスに a を使用します。値のセマンティクスは次のとおりです。

#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、代入演算子などのメソッドをさらに定義する必要があります。

于 2013-04-06T13:41:26.230 に答える