Note that there are some explanatory texts on larger screens.

plurals
  1. POVectors of variables vs vector of pointers
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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