diff --git a/2021-oop1/vo/stream-07/01-unique-ptr-1.cpp b/2021-oop1/vo/stream-07/01-unique-ptr-1.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..192fd2860f794419665af7b009f1b260cf3e6c3d
--- /dev/null
+++ b/2021-oop1/vo/stream-07/01-unique-ptr-1.cpp
@@ -0,0 +1,25 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  public: 
+    SuperHero(std::string name) : name_(name) 
+    { 
+      std::cout << name_ << " wurde erzeugt" << std::endl; 
+    };
+ 
+    ~SuperHero() 
+    { 
+      std::cout << name_ << " wurde zerstört" << std::endl; 
+    };
+ 
+  private:
+    std::string name_;
+};
+ 
+int main()
+{
+  std::unique_ptr<SuperHero> s1(new SuperHero("Batman"));     
+  return 0;
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/02-unique-ptr-2.cpp b/2021-oop1/vo/stream-07/02-unique-ptr-2.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8d2936af9a285b08200fb027780b394747aa0830
--- /dev/null
+++ b/2021-oop1/vo/stream-07/02-unique-ptr-2.cpp
@@ -0,0 +1,24 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  std::string name_;
+  SuperHero(std::string name) : name_(name) 
+  { 
+    std::cout << name_ << " wurde erzeugt" << std::endl; 
+  };
+ 
+  ~SuperHero() 
+  { 
+    std::cout << name_ << " wurde zerstört" << std::endl; 
+  };
+};
+ 
+int main()
+{
+  {
+    std::unique_ptr<SuperHero> s1(new SuperHero("Batman"));     
+  } //Scope von s1 endet => s1 wird zerstört. 
+  return 0;
+} 
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/03-unique-ptr-3.cpp b/2021-oop1/vo/stream-07/03-unique-ptr-3.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3b28f7f28f468bd767bd040458dbbb1ee18c43c3
--- /dev/null
+++ b/2021-oop1/vo/stream-07/03-unique-ptr-3.cpp
@@ -0,0 +1,23 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  std::string name_;
+  SuperHero(std::string name) : name_(name) 
+  { 
+    std::cout << name_ << " wurde erzeugt" << std::endl; 
+  };
+ 
+  ~SuperHero() 
+  { 
+    std::cout << name_ << " wurde zerstört" << std::endl; 
+  };
+};
+ 
+int main()
+{
+  auto joker1 = std::make_shared<SuperHero>("Joker");
+  std::weak_ptr<SuperHero> joker2(joker1);
+  std::cout << joker1.use_count() << std::endl;
+} 
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/04-access-members.cpp b/2021-oop1/vo/stream-07/04-access-members.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d9c2a448d6c82fcb8591e07313d2280e9260b7cd
--- /dev/null
+++ b/2021-oop1/vo/stream-07/04-access-members.cpp
@@ -0,0 +1,38 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  public:
+    SuperHero(std::string name, std::string phrase) : name_(name), 
+      phrase_(phrase) 
+    { 
+      std::cout << name_ << " wurde erzeugt" << std::endl; 
+    };
+ 
+    ~SuperHero() 
+    { 
+      std::cout << name_ << " wurde zerstört" << std::endl; 
+    };
+ 
+    void SayPhrase() 
+    { 
+      std::cout << phrase_ << std::endl; 
+    };
+ 
+  private:
+    std::string phrase_; 
+    std::string name_;
+};
+ 
+int main()
+{
+  std::unique_ptr<SuperHero> s1(new SuperHero("Batman", "I am Batman!"));
+  std::unique_ptr<SuperHero> s2 = std::make_unique<SuperHero>("Iron Man", 
+    "I love you 3000!");
+ 
+  s1->SayPhrase(); //I am Batman!
+  s2->SayPhrase(); //I love you 3000!
+ 
+  return 0;
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/05-shared-ptr-1.cpp b/2021-oop1/vo/stream-07/05-shared-ptr-1.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..45a8ce697c50cbbeefa5c4dc7d5805205071cc33
--- /dev/null
+++ b/2021-oop1/vo/stream-07/05-shared-ptr-1.cpp
@@ -0,0 +1,36 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  public:
+    SuperHero(std::string name) : name_(name)
+    { 
+      std::cout << name_ << " wurde erzeugt" << std::endl; 
+    };
+ 
+    ~SuperHero() 
+    { 
+      std::cout << name_ << " wurde zerstört" << std::endl; 
+    };
+ 
+    void SayPhrase() 
+    { 
+      std::cout << phrase_ << std::endl; 
+    };
+ 
+  private:
+    std::string phrase_; 
+    std::string name_;
+};
+
+int main()
+{
+  std::shared_ptr<SuperHero> s1(new SuperHero("Batman")); //one pointer to object
+  std::shared_ptr<SuperHero> s2(s1); //two pointers to object
+  std::shared_ptr<SuperHero> s3 = s2; //three pointers to object
+ 
+  std::cout << s1.use_count() << std::endl; //3
+ 
+  return 0;
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/05-shared-ptr-2.cpp b/2021-oop1/vo/stream-07/05-shared-ptr-2.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..26b95deecd8b70e3231658404f2cbf34838c233c
--- /dev/null
+++ b/2021-oop1/vo/stream-07/05-shared-ptr-2.cpp
@@ -0,0 +1,37 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  public:
+    SuperHero(std::string name) : name_(name)
+    { 
+      std::cout << name_ << " wurde erzeugt" << std::endl; 
+    };
+ 
+    ~SuperHero() 
+    { 
+      std::cout << name_ << " wurde zerstört" << std::endl; 
+    };
+ 
+    void SayPhrase() 
+    { 
+      std::cout << phrase_ << std::endl; 
+    };
+ 
+  private:
+    std::string phrase_; 
+    std::string name_;
+};
+
+int main()
+{
+  std::shared_ptr<SuperHero> s1 = std::make_shared<SuperHero>("Batman");
+  {
+    std::shared_ptr<SuperHero> s2(s1);
+    std::cout << s1.use_count() << std::endl; //2
+  }
+  std::cout << s1.use_count() << std::endl; //1
+ 
+  return 0;
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/06-circular-dependency.cpp b/2021-oop1/vo/stream-07/06-circular-dependency.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c5be5c487fb74b468baca52d45de56953f022d3d
--- /dev/null
+++ b/2021-oop1/vo/stream-07/06-circular-dependency.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  public:
+    SuperHero(std::string name) : name_(name) { };
+    ~SuperHero() { };
+    std::shared_ptr<SuperHero> enemie_;
+ 
+  private:
+    std::string name_;
+};
+ 
+int main()
+{
+  std::shared_ptr<SuperHero> s1(new SuperHero("Batman"));
+  std::shared_ptr<SuperHero> s2 = std::make_shared<SuperHero>("Two-Face"); 
+ 
+  s1->enemie_ = s2;
+  s2->enemie_ = s1;
+ 
+  return 0;
+}
+
+// Check for valgrind :)
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/07-dangling-pointer.cpp b/2021-oop1/vo/stream-07/07-dangling-pointer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..58dc9f560e41d1df2b83a311dd766d825b7df406
--- /dev/null
+++ b/2021-oop1/vo/stream-07/07-dangling-pointer.cpp
@@ -0,0 +1,29 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  public:
+    SuperHero(std::string name) : name_(name) { };
+    ~SuperHero() { };
+    std::string GetName() const 
+    {
+      return name_;
+    }
+
+  private:
+    std::string name_;
+};
+ 
+int main()
+{
+  auto joker1 = std::make_shared<SuperHero>("Joker");
+  std::shared_ptr<SuperHero> joker2(joker1);
+  
+  joker1 = nullptr;
+  
+  std::cout << joker1->GetName() << std::endl; //Segmentation Fault
+  return 0;
+ 
+  return 0;
+}
diff --git a/2021-oop1/vo/stream-07/08-weak-ptr-1.cpp b/2021-oop1/vo/stream-07/08-weak-ptr-1.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8977c47a267efbe74d0a85959d3b5641fe30a5fe
--- /dev/null
+++ b/2021-oop1/vo/stream-07/08-weak-ptr-1.cpp
@@ -0,0 +1,22 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  std::string name_;
+  SuperHero(std::string name) : name_(name) 
+  { 
+    std::cout << name_ << " wurde erzeugt" << std::endl; 
+  };
+ 
+  ~SuperHero() 
+  { 
+    std::cout << name_ << " wurde zerstört" << std::endl; 
+  };
+};
+ 
+int main()
+{
+  std::unique_ptr<SuperHero> s1 = std::make_unique<SuperHero>("Batman");     
+  return 0;
+} 
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/09-weak-ptr-2.cpp b/2021-oop1/vo/stream-07/09-weak-ptr-2.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7bad666d96ad0da55e66b45b3cfb048e1ff5fe6a
--- /dev/null
+++ b/2021-oop1/vo/stream-07/09-weak-ptr-2.cpp
@@ -0,0 +1,38 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  std::string name_;
+  SuperHero(std::string name) : name_(name) 
+  { 
+    std::cout << name_ << " wurde erzeugt" << std::endl; 
+  };
+ 
+  ~SuperHero() 
+  { 
+    std::cout << name_ << " wurde zerstört" << std::endl; 
+  };
+
+  std::string GetName() const 
+  {
+    return name_;
+  }
+
+};
+ 
+int main()
+{
+  auto hero = std::make_shared<SuperHero>("Aquaman");
+  std::weak_ptr<SuperHero> w_hero(hero);
+ 
+  auto new_hero = w_hero.lock(); //Umwandlung in std::shared_ptr
+ 
+  new_hero = nullptr;
+  hero = nullptr;  
+  if(w_hero.expired())
+  {
+    std::cout << "Kein Aquaman mehr :-(";
+  }
+  return 0;
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/10-weak-ptr-3.cpp b/2021-oop1/vo/stream-07/10-weak-ptr-3.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a052e7dd720c014e51009b7b8e39de4b83eae1ec
--- /dev/null
+++ b/2021-oop1/vo/stream-07/10-weak-ptr-3.cpp
@@ -0,0 +1,38 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  std::string name_;
+  SuperHero(std::string name) : name_(name) 
+  { 
+    std::cout << name_ << " wurde erzeugt" << std::endl; 
+  };
+ 
+  ~SuperHero() 
+  { 
+    std::cout << name_ << " wurde zerstört" << std::endl; 
+  };
+
+  std::string GetName() const 
+  {
+    return name_;
+  }
+
+};
+ 
+int main()
+{
+  auto hero = std::make_shared<SuperHero>("Aquaman");
+  std::weak_ptr<SuperHero> w_hero(hero);
+  //std::cout << w_hero->GetName(); --> Zugriff nicht möglich!
+ 
+  std::cout << w_hero.use_count() << std::endl; //1
+ 
+  auto new_hero = w_hero.lock(); //Umwandlung in std::shared_ptr
+  std::cout << new_hero->GetName();
+ 
+  std::cout << w_hero.use_count() << std::endl; //2
+ 
+  return 0;
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/11-circular-solved.cpp b/2021-oop1/vo/stream-07/11-circular-solved.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9c501d74f8ef38dd614417698242e70bafb93585
--- /dev/null
+++ b/2021-oop1/vo/stream-07/11-circular-solved.cpp
@@ -0,0 +1,27 @@
+#include <iostream>
+#include <string>
+#include <memory>
+
+struct SuperHero {
+  public:
+    SuperHero(std::string name) : name_(name) { };
+    ~SuperHero() { };
+    std::weak_ptr<SuperHero> enemie_;
+ 
+  private:
+    std::string name_;
+};
+ 
+ 
+int main()
+{
+  std::shared_ptr<SuperHero> s1(new SuperHero("Batman"));
+  std::shared_ptr<SuperHero> s2 = std::make_shared<SuperHero>("Two-Face"); 
+ 
+  s1->enemie_ = s2;
+  s2->enemie_ = s1;
+ 
+  return 0;
+}
+
+//Check with Valgrind :) 
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/12-exceptions-1.cpp b/2021-oop1/vo/stream-07/12-exceptions-1.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..781ff3209f168ba5f4d17d0ee838ff83444f702e
--- /dev/null
+++ b/2021-oop1/vo/stream-07/12-exceptions-1.cpp
@@ -0,0 +1,25 @@
+#include <iostream>
+
+double division(int var1, int var2)
+{
+  if (var2 == 0) {
+    throw "Division by Zero.";
+  }
+  return (var1 / var2);
+}
+ 
+int main()
+{
+  int a = 30;
+  int b = 0;
+  double d = 0;
+ 
+  try {
+    d = division(a, b);
+    std::cout << d << std::endl;
+  }
+  catch (const char* error) {
+    std::cout << error << std::endl;
+  }
+  return 0;
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/13-exceptions-2.cpp b/2021-oop1/vo/stream-07/13-exceptions-2.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e4822f383d784708dc12f06f0161f6e474647410
--- /dev/null
+++ b/2021-oop1/vo/stream-07/13-exceptions-2.cpp
@@ -0,0 +1,14 @@
+#include <iostream>
+#include <exception>
+
+int main()
+{
+  try {
+    int* myarray = new int[1000000000000]; 
+  } catch (std::bad_alloc &ex) {
+    std::cout << "Wozu brauchst du so viel Speicher?! " << ex.what() << std::endl;
+  }
+  catch (std::exception &ex) {
+    std::cout << ex.what() << std::endl;
+  }
+}
diff --git a/2021-oop1/vo/stream-07/14-exceptions-3.cpp b/2021-oop1/vo/stream-07/14-exceptions-3.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ceb0382aacb7f8f749e2754af65a8fff2de72a52
--- /dev/null
+++ b/2021-oop1/vo/stream-07/14-exceptions-3.cpp
@@ -0,0 +1,14 @@
+#include <iostream>
+#include <exception>
+
+int main()
+{
+  try {
+    std::vector<int> rules = {34, 35};
+    rules.at(2); 
+  } catch(std::out_of_range &ex){
+    std::cout << "out_of_range " << ex.what() << std::endl; 
+  } catch (std::exception &ex) {
+    std::cout << "exception " << ex.what() << std::endl;
+  }
+}
\ No newline at end of file
diff --git a/2021-oop1/vo/stream-07/15-exceptions-4.cpp b/2021-oop1/vo/stream-07/15-exceptions-4.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..03fe77969e8048863147cfca2dd1c5c6c06655c1
--- /dev/null
+++ b/2021-oop1/vo/stream-07/15-exceptions-4.cpp
@@ -0,0 +1,22 @@
+#include <iostream>
+#include <exception>
+
+class MyException : public std::exception
+{
+  public: 
+    const char* what () const throw ()
+    {
+      return "Ich schmeiße mit Exceptions um mich!";
+    }
+};
+ 
+int main()
+{
+  try {
+    throw MyException();
+  } catch (MyException& e) {
+    std::cout << e.what() << std::endl;
+  } catch (std::exception& e) {
+    std::cout << e.what();
+  }
+}
\ No newline at end of file