Note that there are some explanatory texts on larger screens.

plurals
  1. POVectors of variables vs vector of pointers
    text
    copied!<p>I was just curious about the differences of using vectors of variables vs a vector of pointers with dynamic memory, and I've found something that confused me. I have a simple main.cpp that looks like this,</p> <pre><code>#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class A { public: A() { x = 2;} virtual ~A() { cout &lt;&lt; "I'm a dead A\n";} public: int x; }; class B : public A { public: B() {x = 4;} ~B() { cout &lt;&lt; "I'm a dead B\n";} }; class C : public A { public: C() { x = 6;} ~C() { cout &lt;&lt; "I'm a dead C\n";} }; int main() { cout &lt;&lt; "Starting variable list\n"; std::vector&lt;A&gt; list; list.push_back( B() ); list.push_back( A() ); list.push_back( B() ); list.push_back( C() ); list.push_back( A() ); for(std::vector&lt;A&gt;::iterator it = list.begin(); it != list.end(); it++) { cout &lt;&lt; it-&gt;x &lt;&lt; endl; } cout &lt;&lt; "\n\nStarting pointer list\n"; std::vector&lt;A *&gt; ptrList; ptrList.push_back( new B()); ptrList.push_back( new A()); ptrList.push_back( new B()); ptrList.push_back( new C()); ptrList.push_back( new A()); for(std::vector&lt;A *&gt;::iterator it = ptrList.begin(); it != ptrList.end(); it++) { cout &lt;&lt; (*it)-&gt;x &lt;&lt; endl; } for(std::vector&lt;A *&gt;::iterator it = ptrList.begin(); it != ptrList.end(); it++) { delete *it; } system("PAUSE"); return 0; } </code></pre> <p>And I get a printout that looks like this:</p> <pre><code>Starting variable list I'm a dead B I'm a dead A I'm a dead A I'm a dead A I'm a dead A I'm a dead A I'm a dead B I'm a dead A I'm a dead A I'm a dead A I'm a dead A I'm a dead C I'm a dead A I'm a dead A I'm a dead A I'm a dead A I'm a dead A I'm a dead A 4 2 4 6 2 Starting pointer list 4 2 4 6 2 I'm a dead B I'm a dead A I'm a dead A I'm a dead B I'm a dead A I'm a dead C I'm a dead A I'm a dead A Press any key to continue . . . </code></pre> <p>What and why did all those destructions occurr in the normal variable list?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload