首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unique_ptr<TStringList []> dst(新TStringList[5])失败

unique_ptr<TStringList []> dst(新TStringList[5])失败
EN

Stack Overflow用户
提问于 2015-06-03 07:09:32
回答 1查看 299关注 0票数 4

MyEnvironment:

代码语言:javascript
复制
C++ Builder XE4

我试图使用TStringList数组使用unique_ptr<>

以下内容没有出现任何错误:

代码语言:javascript
复制
unique_ptr<int []> vals(new int [10]);

另一方面,以下显示错误:

代码语言:javascript
复制
unique_ptr<TStringList []> sls(new TStringList [10]);

错误是“访问冲突在0x0000000:读取地址0x0000000”。

对于TStringList,我不能使用unique_ptr<>数组吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-03 08:29:13

这不是一个unique_ptr问题:您的尝试失败了,因为您试图创建一个实际的TStringList对象实例数组,而不是指向TStringList实例的指针数组(有关详细信息,您可以查看如何在Borland C++ Builder上创建一个按钮数组并使用它?质量中心报告#78902)。

例如,即使您尝试:

代码语言:javascript
复制
TStringList *sls(new TStringList[10]);

(指向大小为10的动态数组并键入TStringList)。

您必须管理指向类型为TStringList *的动态数组的指针。使用std::unique_ptr

代码语言:javascript
复制
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);

无论如何,如果在编译时就知道了大小,那么这是一个更好的选择:

代码语言:javascript
复制
boost::array<std::unique_ptr<TStringList>, 10> sls;

(还请看一下带数组的ptr?)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30613156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档