0

私は自分std::vectorunique_ptrs のためにこれを行ってきました:

m_stuff.push_back(std::unique_ptr<Thing> (new DerivedThing()));

これにより、ベクター内の要素が削除されたときにメモリが自動的に削除されます。

別のシナリオがあり、他の何かが経由してヒープメモリを作成するnewため、ジェネリックポインターが既に存在します。さて、私がこれをするとします:

    m_stuff.push_back(std::unique_ptr<Thing> (thingy));
    //thingy is Thing*

これを行うとすぐに、ベクトルがベクトルから削除されたときにdになるように、ベクトルm_stuffが制御できるようになったと安全に想定できますか? もちろん、他の場所にコピーまたは保存された場合、ポインターがぶら下がっている可能性がありますが、それは別の問題です。thingydeletethingy

4

3 に答える 3

1

unique_ptr魔法のようなものは何もありません。これには通常のコンストラクタ (実際にはいくつかあります) があり、型のポインタを取り、Tポインティの削除を担当します。そうです、このポインターがどこから来たのかは気にしません(そして気にすることはできません)

于 2013-05-15T09:52:17.490 に答える
0

はい、そうです。生のポインタから構築されると、一意のポインタがポインティを所有します。

于 2013-05-15T09:47:36.220 に答える