[galib] How to delete a genome
Adam Nohejl
adam at nohejl.name
Thu Apr 9 05:30:58 EDT 2009
> Hi everybody.
>
> I have a probably very stupid question. In my program I need to launch
> sequentially many GA, so I would like to delete my old genome and ga
> to
> free some memory. for example I use
Hi Michele,
I think that your question is related more to C++ than to galib
itself. If you are new to C++, read at least something about
constructors, destructors and memory management.
You can try this:
<http://www.parashift.com/c++-faq-lite/ctors.html>
<http://www.parashift.com/c++-faq-lite/dtors.html>
<http://www.parashift.com/c++-faq-lite/freestore-mgmt.html>
and if you still feel lost, get a general book about C++.
> GABin2DecGenome genome(map, Objective, (MyObject *) Object);
> GASimpleGA ga(genome);
In this case, the destructors are called automatically when the
variables go out of scope (i.e. at the end of the block where they
were declared). This should also answer your primary question about
how to reclaim memory.
> genome.~GABin2DecGenome();
> ga.~GASimpleGA();
Never call destructors explicitly (unless you know what you are doing).
> Anyway, my program always breaks down telling me
>
> "Unhandled exception at 0x004040f5 in MyProgram.exe: 0xC0000005:
> Access
> violation reading location 0xdddddddd."
That's probably because the destructor is called twice, once by your
explicit call, once automatically at the end of the enclosing block.
> Also, I tried to use these expression
>
> delete genome;
> delete ga;
1. Use delete only when you allocate objects using the new oprator.
2. Even better, if you decide for dynamic memory allocation, use smart
pointers and avoid the explicit use of delete. (Look for RAII.)
I hope this helps,
--
Adam
More information about the galib
mailing list