{"id":1935,"date":"2014-08-15T19:38:16","date_gmt":"2014-08-15T18:38:16","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=1935"},"modified":"2014-08-15T19:38:16","modified_gmt":"2014-08-15T18:38:16","slug":"polymorphic-objects-can-live-on-the-stack","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=1935","title":{"rendered":"polymorphic objects can live on the stack"},"content":{"rendered":"<p>Polymorphie kennt ihr ja, Grundz\u00fcge von OO;<br \/>\nIm groben geht das ja so<\/p>\n<pre><code>\r\nclass Base {\r\n  public:\r\n  virtual void func() {\r\n     cout << \"Base\\n\";\r\n  }  \r\n};\r\n\r\nclass Derived : public Base {\r\n  public:\r\n  virtual void func() {\r\n    cout << \"Derived\\n\";\r\n  }  \r\n};\r\n\r\nint main() {\r\n  Base *p = new Derived();\r\n  p->func();  \/\/ print \"Derived\"\r\n}\r\n<\/code><\/pre>\n<p>Ich habe ein Pointer vom Type Base und dennoch wird die Funktion von Derived aufgerufen.<br \/>\nDas hier funktioniert allerdings auch:<\/p>\n<pre><code>\r\nint main() {  \r\n  \/\/ We dont need to create the object on the heap with new\r\n  \/\/ Base *p = new Derived();\r\n  \r\n  \/\/ Allocate this object on the stack\r\n  Derived d;   \r\n  Base *p = &d;\r\n  p->func(); \/\/ prints \"Derived\" and not \"Base\"\r\n}\r\n<\/code><\/pre>\n<p>Objekte auf dem Stack werden wesentlich schneller allokiert als auf dem Heap. Das m\u00fcsste ein deutlichen Geschwindigkeitsvorteil f\u00fcr kleine und kurzlebende Objekte sein.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Polymorphie kennt ihr ja, Grundz\u00fcge von OO; Im groben geht das ja so class Base { public: virtual void func() { cout func(); \/\/ prints \"Derived\" and not \"Base\" } Objekte auf dem Stack werden wesentlich schneller allokiert als auf dem Heap. Das m\u00fcsste ein deutlichen Geschwindigkeitsvorteil f\u00fcr kleine und kurzlebende Objekte sein.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-1935","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1935"}],"version-history":[{"count":3,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1935\/revisions"}],"predecessor-version":[{"id":1938,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/1935\/revisions\/1938"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1935"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}