MyEnvironment:
C++ Builder XE4我试图使用TStringList数组使用unique_ptr<>。
以下内容没有出现任何错误:
unique_ptr<int []> vals(new int [10]);另一方面,以下显示错误:
unique_ptr<TStringList []> sls(new TStringList [10]);错误是“访问冲突在0x0000000:读取地址0x0000000”。
对于TStringList,我不能使用unique_ptr<>数组吗?
发布于 2015-06-03 08:29:13
这不是一个unique_ptr问题:您的尝试失败了,因为您试图创建一个实际的TStringList对象实例数组,而不是指向TStringList实例的指针数组(有关详细信息,您可以查看如何在Borland C++ Builder上创建一个按钮数组并使用它?和质量中心报告#78902)。
例如,即使您尝试:
TStringList *sls(new TStringList[10]);(指向大小为10的动态数组并键入TStringList)。
您必须管理指向类型为TStringList *的动态数组的指针。使用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);无论如何,如果在编译时就知道了大小,那么这是一个更好的选择:
boost::array<std::unique_ptr<TStringList>, 10> sls;(还请看一下带数组的ptr?)
https://stackoverflow.com/questions/30613156
复制相似问题