myenvironment:
c++ builder xe4
i trying use array of tstringlist using unique_ptr<>.
following no problem:
unique_ptr<int []> vals(new int [10]);
on other hand, following shows error:
unique_ptr<tstringlist []> sls(new tstringlist [10]);
the error 'access violation @ 0x000000000: read of address 0x0000000'.
for tstringlist, can't use array of unique_ptr<>?
it isn't unique_ptr
issue: attempt fails because trying create array of actual tstringlist
object instances instead of array of pointers tstringlist
instances (for further details can take @ how create array of buttons on borland c++ builder , work it? , quality central report #78902).
e.g. you'll access violation if try:
tstringlist *sls(new tstringlist[10]);
(pointer dynamic array of size 10
, type tstringlist
).
you have manage pointer dynamic array of type tstringlist *
. using std::unique_ptr
:
std::unique_ptr< std::unique_ptr<tstringlist> [] > sls( new std::unique_ptr<tstringlist>[10]); sls[0].reset(new tstringlist); sls[1].reset(new tstringlist); sls[0]->add("test 00"); sls[0]->add("test 01"); sls[1]->add("test 10"); sls[1]->add("test 11"); showmessage(sls[0]->text); showmessage(sls[1]->text);
anyway, if size known @ compile time, better choice:
boost::array<std::unique_ptr<tstringlist>, 10> sls;
(also take @ is there use unique_ptr array?)
Comments
Post a Comment