<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Virtual function does not work... (or i missed something(iprobably did))</title>
		<link>http://www.allegro.cc/forums/view/617492</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 09 Jul 2018 00:23:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well... this issue is so weird i don&#39;t know how to synthesize it...<br />I&#39;m just gonna post the code here, and tell you what i&#39;ve figured out so far.<br />Feel free to test it and tell me what output you get ! (Only Allegro lib and std used)</p><p>This is going to be some sort of space game, yet its more a test for me to learn than an actual game <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>main.cpp</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;string&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;sstream&gt;</span>
<span class="number">  5</span><span class="p">#include &lt;chrono&gt;</span>
<span class="number">  6</span><span class="p">#include &lt;thread&gt;</span>
<span class="number">  7</span><span class="p">#include "allegro5\allegro.h"</span>
<span class="number">  8</span><span class="p">#include "allegro5\allegro_color.h"</span>
<span class="number">  9</span><span class="p">#include "allegro5/allegro_primitives.h"</span>
<span class="number"> 10</span><span class="p">#include "Chunk.h"</span>
<span class="number"> 11</span><span class="p">#include &lt;random&gt;</span>
<span class="number"> 12</span><span class="p">#include "Planet.h"</span>
<span class="number"> 13</span><span class="p">#include "AstronomicalObject.h"</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">void</span> testDraw<span class="k2">(</span>AstronomicalObject <span class="k3">*</span>ast<span class="k2">)</span>
<span class="number"> 16</span><span class="k2">{</span>
<span class="number"> 17</span>    ast-&gt;draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    <span class="k1">if</span> <span class="k2">(</span> <span class="k1">typeid</span><span class="k2">(</span><span class="k3">*</span>ast<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">typeid</span><span class="k2">(</span>Planet<span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</span>        std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"PLANET"</span><span class="k2">;</span>
<span class="number"> 21</span>    <span class="k2">}</span><span class="k1">else</span>
<span class="number"> 22</span>    <span class="k2">{</span>
<span class="number"> 23</span>        std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"imanobject"</span><span class="k2">;</span>
<span class="number"> 24</span>    <span class="k2">}</span>
<span class="number"> 25</span><span class="k2">}</span>
<span class="number"> 26</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number"> 27</span><span class="k2">{</span>
<span class="number"> 28</span>    <span class="k1">auto</span> now <span class="k3">=</span> std::chrono::system_clock::now<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>    <span class="k1">auto</span> now_ms <span class="k3">=</span> std::chrono::time_point_cast<span class="k3">&lt;</span>std::chrono::milliseconds&gt;<span class="k2">(</span>now<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    <span class="k1">auto</span> value <span class="k3">=</span> now_ms.time_since_epoch<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>    <span class="k1">unsigned</span> <span class="k1">int</span> duration <span class="k3">=</span> value.count<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span>duration<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 35</span>    <span class="k2">{</span>
<span class="number"> 36</span>        std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"It Works"</span><span class="k2">;</span>
<span class="number"> 37</span>    <span class="k2">}</span><span class="k1">else</span>
<span class="number"> 38</span>    <span class="k2">{</span>
<span class="number"> 39</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Allegro Not Loaded"</span><span class="k2">;</span>
<span class="number"> 40</span>        <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 41</span>    <span class="k2">}</span>
<span class="number"> 42</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_FRAMELESS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span> mainDisplay <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">1800</span>,<span class="n">1000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    Chunk testChunk<span class="k2">;</span>
<span class="number"> 45</span>    Planet <span class="k3">*</span> testPlanet <span class="k3">=</span> <span class="k1">new</span> Planet<span class="k2">(</span><span class="n">3</span>,<span class="n">6</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>    testPlanet <span class="k3">-</span><span class="k3">&gt;</span>draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>    <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>    std::this_thread::sleep_for<span class="k2">(</span>std::chrono::milliseconds<span class="k2">(</span><span class="n">1000</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> u <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>u<span class="k3">&lt;</span><span class="n">5</span><span class="k2">;</span>u<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 50</span>    <span class="k2">{</span>
<span class="number"> 51</span>        testChunk <span class="k3">=</span> Chunk<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>        std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>testChunk.getAstroObjListSize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>        <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">20</span>,<span class="n">20</span>,<span class="n">20</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>        <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span>testChunk.getAstroObjListSize<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 55</span>        <span class="k2">{</span>
<span class="number"> 56</span>            testDraw<span class="k2">(</span>testChunk.getAstroObjBylistIndex<span class="k2">(</span>i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>        <span class="k2">}</span>
<span class="number"> 58</span>        <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>        std::this_thread::sleep_for<span class="k2">(</span>std::chrono::milliseconds<span class="k2">(</span><span class="n">1000</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>
<span class="number"> 61</span>    <span class="k2">}</span>
<span class="number"> 62</span>
<span class="number"> 63</span>    <span class="c">//al_set_target_bitmap(nullptr);   //does some weird access violation</span>
<span class="number"> 64</span>    <span class="c">//al_destroy_display(mainDisplay);</span>
<span class="number"> 65</span>    <a href="http://www.allegro.cc/manual/al_shutdown_primitives_addon"><span class="a">al_shutdown_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 67</span><span class="k2">}</span>
</div></div><p>


Chunk.h
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#ifndef CHUNK_H</span>
<span class="number">  2</span><span class="p">#define CHUNK_H</span>
<span class="number">  3</span><span class="p">#include "AstronomicalObject.h"</span>
<span class="number">  4</span><span class="p">#include "Planet.h"</span>
<span class="number">  5</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">  6</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">class</span> Chunk
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>    public:
<span class="number"> 11</span>        Chunk<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>        Chunk<span class="k2">(</span><span class="k1">bool</span> ranGen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>        <span class="k1">virtual</span> ~Chunk<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>        <span class="k1">void</span> addAstroObject<span class="k2">(</span>AstronomicalObject <span class="k3">*</span>toBeAdded<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>        AstronomicalObject<span class="k3">*</span> getAstroObjBylistIndex<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> x<span class="k2">)</span><span class="k2">{</span><span class="k1">if</span><span class="k2">(</span>x<span class="k3">&lt;</span>m_listeContenu.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span><span class="k1">return</span> m_listeContenu<span class="k2">[</span>x<span class="k2">]</span><span class="k2">;</span><span class="k2">}</span><span class="k1">else</span><span class="k2">{</span><span class="k1">return</span> nullptr<span class="k2">;</span><span class="k2">}</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 16</span>        <span class="k1">unsigned</span> <span class="k1">int</span> getAstroObjListSize<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k1">return</span> m_listeContenu.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 17</span>    protected:
<span class="number"> 18</span>        std::vector<span class="k3">&lt;</span>AstronomicalObject<span class="k3">*</span><span class="k3">&gt;</span> m_listeContenu<span class="k2">;</span>
<span class="number"> 19</span>    private:
<span class="number"> 20</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="p">#endif // CHUNK_H</span>
</div></div><p>


Chunk.cpp
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include "Chunk.h"</span>
<span class="number">  2</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">  3</span><span class="p">#include "iostream"</span>
<span class="number">  4</span>
<span class="number">  5</span>Chunk::Chunk<span class="k2">(</span><span class="k2">)</span>
<span class="number">  6</span><span class="k2">{</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k2">}</span>
<span class="number">  9</span>Chunk::Chunk<span class="k2">(</span><span class="k1">bool</span> ranGen<span class="k2">)</span>
<span class="number"> 10</span><span class="k2">{</span>
<span class="number"> 11</span>    <span class="k1">if</span><span class="k2">(</span>ranGen<span class="k2">)</span>
<span class="number"> 12</span>    <span class="k2">{</span>
<span class="number"> 13</span>        <span class="k1">unsigned</span> <span class="k1">int</span> numbOfObj <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">30</span><span class="k2">;</span>
<span class="number"> 14</span>        std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">" number:"</span><span class="k3">&lt;</span><span class="k3">&lt;</span> numbOfObj <span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">". "</span><span class="k2">;</span>
<span class="number"> 15</span>        <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>numbOfObj<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 16</span>        <span class="k2">{</span>
<span class="number"> 17</span>            addAstroObject<span class="k2">(</span><span class="k1">new</span> AstronomicalObject<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">320</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">320</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//multiple tries to make it work</span>
<span class="number"> 18</span>            addAstroObject<span class="k2">(</span><span class="k1">new</span> Planet<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">320</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">320</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>            m_listeContenu.push_back<span class="k2">(</span><span class="k1">new</span> Planet<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">320</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">320</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>        <span class="k2">}</span>
<span class="number"> 21</span>    <span class="k2">}</span>
<span class="number"> 22</span><span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span>Chunk::~Chunk<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 25</span><span class="k2">{</span>
<span class="number"> 26</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span>m_listeContenu.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 27</span>    <span class="k2">{</span>
<span class="number"> 28</span>        <span class="k1">delete</span> m_listeContenu<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 29</span>    <span class="k2">}</span>
<span class="number"> 30</span><span class="k2">}</span>
<span class="number"> 31</span><span class="k1">void</span> Chunk::addAstroObject<span class="k2">(</span>AstronomicalObject <span class="k3">*</span> toBeAdded<span class="k2">)</span>
<span class="number"> 32</span><span class="k2">{</span>
<span class="number"> 33</span>    m_listeContenu.push_back<span class="k2">(</span>toBeAdded<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span><span class="k2">}</span>
</div></div><p>


AstronomicalObject.h
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#ifndef ASTRONOMICALOBJECT_H</span>
<span class="number">  2</span><span class="p">#define ASTRONOMICALOBJECT_H</span>
<span class="number">  3</span><span class="p">#include "allegro5/color.h"</span>
<span class="number">  4</span><span class="p">#include "allegro5/allegro_primitives.h"</span>
<span class="number">  5</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  6</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">class</span> AstronomicalObject
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>    public:
<span class="number"> 11</span>
<span class="number"> 12</span>        AstronomicalObject<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>        AstronomicalObject<span class="k2">(</span><span class="k1">float</span> xPos, <span class="k1">float</span> yPos<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>        <span class="k1">virtual</span> ~AstronomicalObject<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>        <span class="k1">float</span> <span class="k1">const</span> getXPos<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k1">return</span> m_xPos<span class="k2">;</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 17</span>        <span class="k1">float</span> <span class="k1">const</span> getYPos<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k1">return</span> m_yPos<span class="k2">;</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 18</span>        <span class="k1">void</span> setXPos<span class="k2">(</span><span class="k1">float</span> xPos<span class="k2">)</span><span class="k2">{</span>m_xPos <span class="k3">=</span> xPos<span class="k2">;</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 19</span>        <span class="k1">void</span> setYPos<span class="k2">(</span><span class="k1">float</span> yPos<span class="k2">)</span><span class="k2">{</span>m_yPos <span class="k3">=</span> yPos<span class="k2">;</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 20</span>        <span class="k1">virtual</span> <span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>    protected:
<span class="number"> 23</span>        <span class="k1">float</span> m_xPos<span class="k2">;</span>
<span class="number"> 24</span>        <span class="k1">float</span> m_yPos<span class="k2">;</span>
<span class="number"> 25</span>        <span class="k1">bool</span> m_isAPlanet<span class="k2">;</span>
<span class="number"> 26</span>    private:
<span class="number"> 27</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="p">#endif // ASTRONOMICALOBJECT_H</span>
</div></div><p>


AstronomicalObject.cpp
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include "AstronomicalObject.h"</span>
<span class="number">  2</span>
<span class="number">  3</span>AstronomicalObject::AstronomicalObject<span class="k2">(</span><span class="k2">)</span>
<span class="number">  4</span><span class="k2">{</span>
<span class="number">  5</span>    m_xPos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>    m_yPos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>    m_isAPlanet <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  8</span><span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</span>AstronomicalObject::AstronomicalObject<span class="k2">(</span><span class="k1">float</span> xPos, <span class="k1">float</span> yPos<span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    m_xPos <span class="k3">=</span> xPos<span class="k2">;</span>
<span class="number"> 13</span>    m_yPos <span class="k3">=</span> yPos<span class="k2">;</span>
<span class="number"> 14</span>    m_isAPlanet <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span>
<span class="number"> 16</span>
<span class="number"> 17</span>AstronomicalObject::~AstronomicalObject<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 18</span><span class="k2">{</span>
<span class="number"> 19</span><span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span><span class="k1">void</span> AstronomicalObject::draw<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 22</span><span class="k2">{</span>
<span class="number"> 23</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_isAPlanet<span class="k2">)</span>
<span class="number"> 24</span>    <span class="k2">{</span>
<span class="number"> 25</span>        <a href="http://www.allegro.cc/manual/al_draw_circle"><span class="a">al_draw_circle</span></a><span class="k2">(</span><span class="n">10</span><span class="k3">+</span><span class="k2">(</span>m_xPos<span class="k3">*</span><span class="n">3</span><span class="k2">)</span>,<span class="n">10</span><span class="k3">+</span><span class="k2">(</span>m_yPos<span class="k3">*</span><span class="n">3</span><span class="k2">)</span>,<span class="n">8</span>,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">200</span>,<span class="n">200</span>,<span class="n">200</span><span class="k2">)</span>,<span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    <span class="k2">}</span>
<span class="number"> 27</span>    <span class="k1">else</span>
<span class="number"> 28</span>    <span class="k2">{</span>
<span class="number"> 29</span>        <a href="http://www.allegro.cc/manual/al_draw_circle"><span class="a">al_draw_circle</span></a><span class="k2">(</span><span class="n">10</span><span class="k3">+</span><span class="k2">(</span>m_xPos<span class="k3">*</span><span class="n">3</span><span class="k2">)</span>,<span class="n">10</span><span class="k3">+</span><span class="k2">(</span>m_yPos<span class="k3">*</span><span class="n">3</span><span class="k2">)</span>,<span class="n">8</span>,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">20</span>,<span class="n">200</span>,<span class="n">20</span><span class="k2">)</span>,<span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    <span class="k2">}</span>
<span class="number"> 31</span><span class="k2">}</span>
</div></div><p>


Planet.h
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#ifndef PLANET_H</span>
<span class="number">  2</span><span class="p">#define PLANET_H</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  5</span><span class="p">#include "AstronomicalObject.h"</span>
<span class="number">  6</span><span class="p">#include "allegro5/color.h"</span>
<span class="number">  7</span><span class="p">#include "allegro5/allegro_primitives.h"</span>
<span class="number">  8</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">class</span> Planet <span class="k2">:</span> <span class="k1">public</span> AstronomicalObject
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    public:
<span class="number"> 13</span>        Planet<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>        Planet<span class="k2">(</span><span class="k1">float</span> xPos, <span class="k1">float</span> yPos<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>        <span class="k1">virtual</span> ~Planet<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>        <span class="k1">virtual</span> <span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    protected:
<span class="number"> 19</span>        <span class="k1">bool</span> m_isWaterPresent<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    private:
<span class="number"> 22</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="p">#endif // PLANET_H</span>
</div></div><p>


Planet.cpp
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include "Planet.h"</span>
<span class="number">  2</span>Planet::Planet<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> AstronomicalObject<span class="k2">(</span><span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>    m_isWaterPresent <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  5</span>    m_isAPlanet <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  6</span><span class="k2">}</span>
<span class="number">  7</span>Planet::Planet<span class="k2">(</span><span class="k1">float</span> xPos, <span class="k1">float</span> yPos<span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>    m_xPos <span class="k3">=</span> xPos<span class="k2">;</span>
<span class="number"> 10</span>    m_yPos <span class="k3">=</span> yPos<span class="k2">;</span>
<span class="number"> 11</span>    m_isAPlanet <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 12</span>    m_isWaterPresent <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 13</span><span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>Planet::~Planet<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 16</span><span class="k2">{</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="k2">}</span>
<span class="number"> 19</span><span class="k1">void</span> Planet::draw<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 20</span><span class="k2">{</span>
<span class="number"> 21</span>    std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"I am A Planet"</span><span class="k2">;</span>
<span class="number"> 22</span>    <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">10</span><span class="k3">+</span><span class="k2">(</span>m_xPos<span class="k3">*</span><span class="n">3</span><span class="k2">)</span>,<span class="n">10</span><span class="k3">+</span><span class="k2">(</span>m_yPos<span class="k3">*</span><span class="n">3</span><span class="k2">)</span>,<span class="n">8</span>,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">20</span>,<span class="n">200</span>,<span class="n">20</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
</div></div><p>

Outcome:<br />i get a plain green circle on my display, as expected, then i get 5 screens with some green and grey hollow circles... the thing is i should get grey hollow circles and PLAIN green circles... Something is going wrong.</p><p>There we are, these are all the sources i&#39;ve got.<br />What it seems is the virtual draw function from AstronomicalObject overriden by Planet does not do what its supposed to do (no runtime link resolution).<br />No matter whether the pointer points to a Planet or an AstronomicalObject, it will call the AstroObj version of the draw function.</p><p>I&#39;ve spent more than 5 hours trying to debug and understand what goes wrong, but... it just makes no sense ! It i supposed to work, that&#39;s what virtual functions are made for !</p><p>I really hope you will discover where the issue come from, cuz i&#39;m dispairing !  <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /></p><p>Thx for you help ! &lt;3</p><p>PS: As you may have noticed, i&#39;m quite new to programming, so maybe the issue is dumb easily fixable, and i&#39;m just too bad to find out how to.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mumu1000)</author>
		<pubDate>Sun, 08 Jul 2018 17:44:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you want people to try your code, provide a zip file with the sources in it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 08 Jul 2018 17:51:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Of course !</p><p>EDIT: Sorry the link didnt work ! You have it attached on my next post.</p><p>There you go ! (Im working with code::blocks, and i&#39;m using MinGW64 Compiler)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mumu1000)</author>
		<pubDate>Sun, 08 Jul 2018 18:01:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your link doesn&#39;t work.<br /><span class="remote-thumbnail"><span class="json">{"name":"611634","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/6\/a626c7009a4e4585ac18f6a2a43739da.png","w":1100,"h":552,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/6\/a626c7009a4e4585ac18f6a2a43739da"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/a/6/a626c7009a4e4585ac18f6a2a43739da-240.jpg" alt="611634" width="240" height="120" /></span></p><p>Just attach the zip file of your source.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 08 Jul 2018 18:04:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nani ??</p><p>Well, there you go then :p
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mumu1000)</author>
		<pubDate>Sun, 08 Jul 2018 18:06:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Every time you assign testChunk to a new Chunk(true) object on the stack you reference destroyed memory.
</p><div class="source-code snippet"><div class="inner"><pre>        testChunk <span class="k3">=</span> Chunk<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
This calls Chunk::operator=(const Chunk&amp; c);. The default assignment operator merely copies the data, so your vector&lt;AstronomicalObject*&gt; gets copied. This is a shallow copy. Now you have two copies of the same astronomical objects. Then the temporary Chuck(true) object goes out of scope, deleting every single object that was in it. Now your testChunk object holds pointers to deleted memory. That is why it segfaults.</p><p>2. You&#39;re using &#39;const&#39; wrong. It goes at the end of the function declaration before the semi-colon.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> X <span class="k2">{</span>
<span class="k1">public</span> <span class="k2">:</span>
   <span class="k1">void</span> function<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span><span class="k2">;</span><span class="c">/// I promise I won't change anything</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 08 Jul 2018 18:49:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh<br />My<br />God</p><p>I still dont understand why it didnt work (i will definitely think about what you said, and try to understand) but using a pointer to a Chunk object instead of the Chunk object itself solved the sh*t !</p><p>My main.cpp is now
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>    Chunk<span class="k3">*</span> testChunk<span class="k2">;</span>
<span class="number">  2</span>    Planet <span class="k3">*</span> testPlanet <span class="k3">=</span> <span class="k1">new</span> Planet<span class="k2">(</span><span class="n">3</span>,<span class="n">6</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>    testPlanet <span class="k3">-</span><span class="k3">&gt;</span>draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>    <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>    std::this_thread::sleep_for<span class="k2">(</span>std::chrono::milliseconds<span class="k2">(</span><span class="n">1000</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> u <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>u<span class="k3">&lt;</span><span class="n">5</span><span class="k2">;</span>u<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  7</span>    <span class="k2">{</span>
<span class="number">  8</span>        testChunk <span class="k3">=</span> <span class="k1">new</span> Chunk<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>        std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>testChunk-&gt;getAstroObjListSize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>        <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">20</span>,<span class="n">20</span>,<span class="n">20</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>        <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span>testChunk-&gt;getAstroObjListSize<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 12</span>        <span class="k2">{</span>
<span class="number"> 13</span>            testDraw<span class="k2">(</span>testChunk-&gt;getAstroObjBylistIndex<span class="k2">(</span>i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>        <span class="k2">}</span>
<span class="number"> 15</span>        <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>        std::this_thread::sleep_for<span class="k2">(</span>std::chrono::milliseconds<span class="k2">(</span><span class="n">1000</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>        <span class="k1">delete</span> testChunk<span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>    <span class="k2">}</span>
</div></div><p>

and the virtual function does its job !!</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617492/1038427#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Now your testChunk object holds pointers to deleted memory. That is why it segfaults.
</p></div></div><p>

The problem is not a crash (it doesnt crash, no segfault here), the problem was the wrong version of the draw() function was called.</p><div class="quote_container"><div class="title">Edgar Reynaldo said:</div><div class="quote"><p>
your vector&lt;AstronomicalObject*&gt; gets copied. This is a shallow copy. Now you have two copies of the same astronomical objects.
</p></div></div><p>

The AstronomicalObjects dont get copied, since vector&lt;AstronomicalObject*&gt; holds pointers, not actual objects. So when it copies, it copies the adress stored in the pointers too. The actual AstronomicalObject is still being referenced to by these copied pointers : no memory leaks here. Where am i wrong ?</p><p>When you do testChunk = Chunk(true) doesnt it implicitly calls delete on the previous content of testChunk ? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /><br />I mean if you have something like std::string myString = &quot;Thank You Very Much For Your Help&quot;;<br />then you do myString = &quot;REALLY&quot;;   it doesnt leak memory right ?</p><div class="quote_container"><div class="title">Edgar Reynaldo said:</div><div class="quote"><p>
You&#39;re using &#39;const&#39; wrong. It goes at the end of the function declaration before the semi-colon.
</p></div></div><p>

My bad ! Thx ! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Thank you so much anyway ! You saved my day once again ! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mumu1000)</author>
		<pubDate>Sun, 08 Jul 2018 19:29:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617492/1038428#target">Mumu1000</a> said:</div><div class="quote"><p>
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617492/1038427#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Now your testChunk object holds pointers to deleted memory. That is why it segfaults.
</p></div></div><p>
The problem is not a crash (it doesnt crash, no segfault here), the problem was the wrong version of the draw() function was called.
</p></div></div><p>
I ran it through gdb, and it segfault&#39;ed. Same code. That&#39;s what you get when you dereference bad memory. You get undefined behavior.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617492/1038428#target">mumu1000</a> said:</div><div class="quote"><p>
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617492/1038427#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
your vector&lt;AstronomicalObject*&gt; gets copied. This is a shallow copy. Now you have two copies of the same astronomical objects.
</p></div></div><p>
The AstronomicalObjects dont get copied, since vector&lt;AstronomicalObject*&gt; holds pointers, not actual objects. So when it copies, it copies the adress stored in the pointers too. The actual AstronomicalObject is still being referenced to by these copied pointers : no memory leaks here. Where am i wrong ?
</p></div></div><p>
Yes, the pointers get copied. But when your temporary object goes out of scope, those pointers get deleted. This means any copies of those pointers now hold references to deleted memory, which will make it segfault.</p><div class="quote_container"><div class="title">Mumu1000 said:</div><div class="quote"><p>
but using a pointer to a Chunk object instead of the Chunk object itself solved the sh*t !
</p></div></div><p>
That&#39;s because you stopped copying your vector. You need to learn about scope and the stack and the heap. Learn about the difference between a shallow copy and a deep copy.</p><p>Look at this code :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>
<span class="number">   2</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;cstdio&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="k1">typedef</span> <span class="k1">unsigned</span> <span class="k1">int</span> ID<span class="k2">;</span>
<span class="number">   7</span><span class="k1">const</span> ID BADID <span class="k3">=</span> ~<span class="n">0</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span>ID GetNewId<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  10</span>   <span class="k1">static</span> ID id <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  11</span>   <span class="k1">return</span> id<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  12</span><span class="k2">}</span>
<span class="number">  13</span>
<span class="number">  14</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="k1">class</span> Base <span class="k2">{</span>
<span class="number">  17</span><span class="k1">protected</span> <span class="k2">:</span>
<span class="number">  18</span>   ID id<span class="k2">;</span>
<span class="number">  19</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  20</span>   Base<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span>
<span class="number">  21</span>         id<span class="k2">(</span>GetNewId<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  22</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number">  23</span>   <span class="k1">virtual</span> ~Base<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  24</span>   <span class="k1">virtual</span> Base<span class="k3">*</span> Clone<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  25</span>      <span class="k1">return</span> <span class="k1">new</span> Base<span class="k2">(</span><span class="k3">*</span><span class="k1">this</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>   <span class="k2">}</span>
<span class="number">  27</span>   ID GetId<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span><span class="k1">return</span> id<span class="k2">;</span><span class="k2">}</span>
<span class="number">  28</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="k1">class</span> Derived <span class="k2">:</span> <span class="k1">public</span> Base <span class="k2">{</span>
<span class="number">  33</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  34</span>   <span class="k1">virtual</span> Base<span class="k3">*</span> Clone<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  35</span>      <span class="k1">return</span> <span class="k1">new</span> Derived<span class="k2">(</span><span class="k3">*</span><span class="k1">this</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>   <span class="k2">}</span>
<span class="number">  37</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  38</span>
<span class="number">  39</span>
<span class="number">  40</span>
<span class="number">  41</span><span class="k1">class</span> BadOwner <span class="k2">{</span>
<span class="number">  42</span>   Base<span class="k3">*</span> b<span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  45</span>
<span class="number">  46</span>   BadOwner<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span>
<span class="number">  47</span>         b<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>
<span class="number">  48</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number">  49</span>
<span class="number">  50</span>   BadOwner<span class="k2">(</span>Base<span class="k3">*</span> base<span class="k2">)</span> <span class="k2">:</span>
<span class="number">  51</span>         b<span class="k2">(</span>base<span class="k2">)</span>
<span class="number">  52</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number">  53</span>
<span class="number">  54</span>   BadOwner<span class="k2">(</span><span class="k1">const</span> BadOwner<span class="k3">&amp;</span> bo<span class="k2">)</span> <span class="k2">:</span>
<span class="number">  55</span>         b<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>
<span class="number">  56</span>   <span class="k2">{</span>
<span class="number">  57</span>      Free<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>      b <span class="k3">=</span> bo.b<span class="k2">;</span><span class="c">/// Shallow copy</span>
<span class="number">  59</span>   <span class="k2">}</span>
<span class="number">  60</span>
<span class="number">  61</span>   ~BadOwner<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>Free<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  62</span>
<span class="number">  63</span>   <span class="k1">void</span> Free<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  64</span>      <span class="k1">if</span> <span class="k2">(</span>b<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  65</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"BadOwner  : Deleting base %p\n"</span> , b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>         <span class="k1">delete</span> b<span class="k2">;</span>
<span class="number">  67</span>         b <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  68</span>      <span class="k2">}</span>
<span class="number">  69</span>   <span class="k2">}</span>
<span class="number">  70</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  71</span>
<span class="number">  72</span><span class="k1">class</span> GoodOwner <span class="k2">{</span>
<span class="number">  73</span>   Base<span class="k3">*</span> b<span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  76</span>
<span class="number">  77</span>   GoodOwner<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span>
<span class="number">  78</span>         b<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>
<span class="number">  79</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number">  80</span>
<span class="number">  81</span>   GoodOwner<span class="k2">(</span>Base<span class="k3">*</span> base<span class="k2">)</span> <span class="k2">:</span>
<span class="number">  82</span>         b<span class="k2">(</span>base<span class="k2">)</span>
<span class="number">  83</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number">  84</span>
<span class="number">  85</span>   GoodOwner<span class="k2">(</span><span class="k1">const</span> GoodOwner<span class="k3">&amp;</span> go<span class="k2">)</span> <span class="k2">:</span>
<span class="number">  86</span>         b<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>
<span class="number">  87</span>   <span class="k2">{</span>
<span class="number">  88</span>      Free<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>      <span class="k1">if</span> <span class="k2">(</span>go.b<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  90</span>         b <span class="k3">=</span> go.b-&gt;Clone<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="c">/// Deep copy</span>
<span class="number">  91</span>      <span class="k2">}</span>
<span class="number">  92</span>   <span class="k2">}</span>
<span class="number">  93</span>
<span class="number">  94</span>   ~GoodOwner<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>Free<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  95</span>
<span class="number">  96</span>   <span class="k1">void</span> Free<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  97</span>      <span class="k1">if</span> <span class="k2">(</span>b<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  98</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"GoodOwner : Deleting base %p\n"</span> , b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>         <span class="k1">delete</span> b<span class="k2">;</span>
<span class="number"> 100</span>         b <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 101</span>      <span class="k2">}</span>
<span class="number"> 102</span>   <span class="k2">}</span>
<span class="number"> 103</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 104</span>
<span class="number"> 105</span>
<span class="number"> 106</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 107</span>   
<span class="number"> 108</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argc<span class="k2">;</span>
<span class="number"> 109</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argv<span class="k2">;</span>
<span class="number"> 110</span>   
<span class="number"> 111</span>   <span class="k2">{</span>
<span class="number"> 112</span>      BadOwner b1<span class="k2">(</span><span class="k1">new</span> Derived<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>      BadOwner b2 <span class="k3">=</span> b1<span class="k2">;</span>
<span class="number"> 114</span>
<span class="number"> 115</span>      GoodOwner g1<span class="k2">(</span><span class="k1">new</span> Derived<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>      GoodOwner g2 <span class="k3">=</span> g1<span class="k2">;</span>
<span class="number"> 117</span>   <span class="k2">}</span><span class="c">/// Crashes because b2 deletes b1.b after b1.b is already deleted when they go out of scope</span>
<span class="number"> 118</span>   
<span class="number"> 119</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 120</span><span class="k2">}</span>
</div></div><p>

If you run it you can see the output and that it crashes because it destroys the same memory twice. That is what you were doing when you copied your vector using a shallow copy.
</p><pre>
GoodOwner : Deleting base 00ca1620
GoodOwner : Deleting base 00ca1600
BadOwner  : Deleting base 00ca2f30
BadOwner  : Deleting base 00ca2f30
</pre><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 08 Jul 2018 21:12:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you very much ! I&#39;ll work on it. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Edit:
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617492/1038429#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Yes, the pointers get copied. But when your temporary object goes out of scope, those pointers get deleted. This means any copies of those pointers now hold references to deleted memory, which will make it segfault.
</p></div></div><p>

Oh, so what you mean is when this temporary object goes out of scope it implicitly calls the destructor function of every object pointed by the pointers held in this temporary object ?  (i&#39;m trying to reformulate to be sure i have well understood what you said ^^)  Is that correct ? (i really must look again at basic class definition and operator method overriding courts xD)</p><p>Edit Edit:</p><p>I&#39;m stupid...<br />It just calls the destructor of the Chunk class, which i told to delete everything.........<br />Sorry, i&#39;ve been kinda slow on this one xD
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mumu1000)</author>
		<pubDate>Sun, 08 Jul 2018 22:15:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617492/1038430#target">mumu1000</a> said:</div><div class="quote"><p>
Oh, so what you mean is when this temporary object goes out of scope it implicitly calls the destructor function <b>of every object pointed by the pointers held in this temporary object</b> ? (i&#39;m trying to reformulate to be sure i have well understood what you said ^^) Is that correct ? (i really must look again at basic class definition and operator method overriding courts xD)
</p></div></div><p>
To answer the specific point in bold, no. And yes, because you told it to. When a pointer goes out of scope, nothing happens. When an object goes out of scope, it&#39;s destructor is called. Which in this case, was Chunk::~Chunk, which deleted every pointer in the object vector.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Jul 2018 00:23:48 +0000</pubDate>
	</item>
</rss>
