C++ 独特的_ptr<;TStringList[]和gt;DST(新的TStringList[5])失败

C++ 独特的_ptr<;TStringList[]和gt;DST(新的TStringList[5])失败,c++,c++builder,vcl,unique-ptr,tstringlist,C++,C++builder,Vcl,Unique Ptr,Tstringlist,我的环境: C++ Builder XE4 我正在尝试使用TStringList数组使用unique\u ptr 以下内容未给出任何错误: unique_ptr<int []> vals(new int [10]); unique_ptr vals(新整数[10]); 另一方面,以下显示错误: unique_ptr<TStringList []> sls(new TStringList [10]); unique_ptr sls(新TStringList[10])

我的环境:

C++ Builder XE4
我正在尝试使用
TStringList
数组使用
unique\u ptr

以下内容未给出任何错误:

unique_ptr<int []> vals(new int [10]);
unique_ptr vals(新整数[10]);
另一方面,以下显示错误:

unique_ptr<TStringList []> sls(new TStringList [10]);
unique_ptr sls(新TStringList[10]);
错误为“0x000000000处的访问冲突:读取地址0x0000000”


对于
TStringList
,我不能使用
unique\u ptr
数组吗?

这不是
unique\u ptr
问题:您的尝试失败是因为您试图创建一个实际
TStringList
对象实例数组,而不是一个指向
TStringList
实例的指针数组(有关更多详细信息,请参阅和)

例如,即使您尝试以下操作,也会遇到访问冲突:

TStringList *sls(new TStringList[10]);
(指向大小为
10
且类型为
TStringList
的动态数组的指针)

必须使用
std::unique\u ptr
管理指向类型为
TStringList*
的动态数组的指针:

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);
std::unique_ptrsls(
新标准::唯一的_ptr[10];
sls[0]。重置(新的TStringList);
sls[1]。重置(新的TStringList);
sls[0]->添加(“测试00”);
sls[0]->添加(“测试01”);
sls[1]->添加(“测试10”);
sls[1]->添加(“测试11”);
ShowMessage(sls[0]->Text);
ShowMessage(sls[1]->Text);
无论如何,如果在编译时知道大小,那么这是一个更好的选择:

boost::array<std::unique_ptr<TStringList>, 10> sls;
boost::阵列sls;

(另请看一看)

newt[]
确实在堆上创建了对象。@MattMcNabb您是对的,答案包含一个错误(现已修复)。谢谢!