私はこのようなコードを持っている:C++ポインタのデフォルトのコンストラクタは何ですか?
class MapIndex
{
private:
typedef std::map<std::string, MapIndex*> Container;
Container mapM;
public:
void add(std::list<std::string>& values)
{
if (values.empty()) // sanity check
return;
std::string s(*(values.begin()));
values.erase(values.begin());
if (values.empty())
return;
MapIndex *mi = mapM[s]; // <- question about this line
if (!mi)
mi = new MapIndex();
mi->add(values);
}
}
私が持っている主な関心事は、新しいアイテムがマップに追加された場合MAPM [s]の式がNULLポインタへの参照を返すかどうかですが?
SGI docsはこれを言う:特定のキーに関連付けられているオブジェクトへの参照を返し DATA_TYPE &オペレータ[](CONST key_type & K)。マップにそのようなオブジェクトが含まれていない場合、operator []はデフォルトオブジェクトdata_type()を挿入します。だから、私の質問は、かどうかデフォルトのオブジェクトDATA_TYPE()の挿入は、NULLポインタを
が作成されますされ、またはそれはメモリのどこかに向いて無効なポインタを作成することができますか?
私はそれが無効であることに気をつけませんが、 "安全"であることを願っています。あなたは0のポインタを簡単にチェックすることができ、その上で "削除"を呼び出すことができます。これについて読むための参照(URL)? –
私は手元にリファレンスがありません。しかし、私はポインタのコンストラクタが0に初期化することを確信しています( 'int'、' short' ...のようなすべての整数型のように)。 –
C++標準、8.5段落5: 'タイプTのオブジェクトをデフォルトで初期化することは、そうでなければ(PODでも配列でもない)、オブジェクトはゼロで初期化されます。' Tがスカラー型(3.9)であれば、オブジェクトはT(T)に変換された0(ゼロ)の値に設定されます。同じ標準では、3.9、段落10: '算術型(3.9.1)、列挙型、ポインタ型、およびメンバ型へのポインタ(3.9.2)、[...]を総称してスカラー型と呼びます。だから、ポインタはデフォルトで0に初期化されます。 –