1

簡単な質問です。nullptr ではなく、マップを空に初期化したいだけです。

 const std::map<std::string, std::string>* emptyDictionary;

私は試した

const std::map<std::string, std::string>* emptyDictionary = {"", ""};

しかし、明らかにそれは正しくありません。みんなありがとう。

4

3 に答える 3

5

マップを作成するのをまったく忘れていました。ポインターを作成しただけです。ポインターが動的に割り当てられたマップを指すようにすることができます。

 const std::map<std::string, std::string>* emptyDictionary
     = new std::map<std::string, std::string>;

このマップは本当に空になります。initializer を追加すると、{{"", ""}}実際には空のマップではなく、空の文字列を空の文字列にマップする 1 つの要素を持つマップになります。

const ポインターを使用してマップを変更することはできないことに注意してください。そのため、なぜこれを行う必要があるのか​​は少し疑問です。

また、無作為な動的割り当ては、一般にプログラミング スタイルとしては不適切であることに注意してください。必要なことを行うためのより良い方法がほぼ確実にあります。または、コメントに基づいて、何かをひどく誤解しているだけです。ポインターを取得する最良の方法は、既存のオブジェクトのアドレスを取得することです。

std::map<std::string, std::string> m;
foo(&m); // pass address of m as a pointer
于 2012-07-05T21:14:06.923 に答える
3
const std::map<std::string, std::string>* emptyDictionary 
     = new std::map<std::string, std::string>();
于 2012-07-05T21:14:38.700 に答える
1

mapのデフォルト(空の)コンストラクターは、空のマップhttp://www.cplusplus.com/reference/stl/map/map/を作成します。書くだけで、スタックに自動割り当てされたマップを宣言します

std::map<std::string, std::string> emptyDictionary();

そして、addres-off演算子を使用して関数に送信します

yourfunction(&emptyDictionary);

ただし、ディクショナリが作成されたインスタンスよりも長持ちする場合は、デストラクタの呼び出しを回避するために、代わりに動的にディクショナリを割り当てる必要があります。

const std::map<std::string, std::string>* emptyDictionary = new std::map<std::string, std::string>();

そうすれば、関数を呼び出すときにaddress-of演算子は必要ありません。

yourfunction(emptyDictionary);

ただし、割り当て解除の責任はあなたにあります。オブジェクトが不要になった場合は、deleteステートメントを使用してオブジェクトを削除する必要があります。

delete emptyDictionary;
于 2012-07-05T21:22:24.527 に答える