gpt4 book ai didi

c++ - unique_ptr dsts(new TStringList[5]) 失败

转载 作者:太空狗 更新时间:2023-10-29 21:18:12 29 4
gpt4 key购买 nike

我的环境:

C++ Builder XE4

我正在尝试使用 TStringList 的数组使用 unique_ptr<> .

以下没有给出任何错误:

unique_ptr<int []> vals(new int [10]);

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

unique_ptr<TStringList []> sls(new TStringList [10]);

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

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

最佳答案

这不是 unique_ptr 问题:您的尝试失败是因为您试图创建一个实际 TStringList 对象实例数组,而不是一个指向 的指针数组>TStringList 实例(有关更多详细信息,您可以查看 How to create an array of buttons on Borland C++ Builder and work with it?Quality Central report #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;

(另请参阅 Is there any use for unique_ptr with array?)

关于c++ - unique_ptr<TStringList []> dsts(new TStringList[5]) 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30613156/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com