It isn't a unique_ptr
issue: your attempt fails because you are trying to create an array of actual TStringList
object instances instead of an array of pointers to TStringList
instances (for further details you can take a look at How to create an array of buttons on Borland C++ Builder and work with it? and Quality Central report #78902).
E.g. You'll get an access violation even if you try:
TStringList *sls(new TStringList[10]);
(pointer to a dynamic array of size 10
and type TStringList
).
You have to manage a pointer to a 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 the size is known at compile time, this is a better choice:
boost::array<std::unique_ptr<TStringList>, 10> sls;
(also take a look at Is there any use for unique_ptr with array?)