7

のコンテナはunique_ptrほとんど意味がないようです。初期化リストでは使用できず、コンテナを反復処理できませんでした(以下の回避策)。私は何かを誤解していますか?unique_ptrまたは、STLコンテナを使用するのはいつ意味がありますか?

#include <memory>
#include <vector>

using namespace std;

struct Base { void go() { }  virtual ~Base() { } }; 
// virtual ~Base() = default; gives
// "declared virtual cannot be defaulted in the class body" why?

class Derived : public Base { };

int main() {

  //vector<unique_ptr<Base>> v1 = { new Derived, new Derived, new Derived };
  //vector<shared_ptr<Base>> v2 = { new Derived, new Derived, new Derived };
  vector<Base*> v3 = { new Derived, new Derived, new Derived };
  vector<shared_ptr<Base>> v4(v3.begin(), v3.end());
  vector<unique_ptr<Base>> v5(v3.begin(), v3.end());

  for (auto i : v5) { // works with v4
    i->go();
  }
  return 0;
}


次の質問は、これらの回避策を見つけるのに役立ちました。

4

3 に答える 3