【发布时间】:2021-10-21 08:12:49
【问题描述】:
我在这里看到了一个很好的答案,这在很大程度上帮助了我 (Proper way to create unique_ptr that holds an allocated array),但我仍然有一个问题。
代码:
void CSelectedBroHighlight::BuildSelectedArray()
{
CString strText;
// empty current array
m_aryStrSelectedBro.RemoveAll();
// get selected count
const auto iSize = m_lbBrothers.GetSelCount();
if(iSize > 0)
{
//auto pIndex = std::make_unique<int[]>(iSize);
auto pIndex = new int[iSize];
m_lbBrothers.GetSelItems(iSize, pIndex);
for(auto i = 0; i < iSize; i++)
{
m_lbBrothers.GetText(pIndex[i], strText);
m_aryStrSelectedBro.Add(strText);
}
delete[] pIndex;
}
}
如果我把pIndex 变成智能指针:
auto pIndex = std::make_unique<int[]>(iSize);
这样我就不需要delete[] pIndex; 电话。然后我不能将pIndex 传递给GetSelItems。我可以在这里传递pIndex.release(),但是我们又遇到了删除问题。
- 我已查看此讨论 (Issue passing std::unique_ptr's),但我们不想传递所有权。
- 如果我简化它并声明我的变量:
auto pIndex = std::make_unique<int[]>(iSize).release();,那么我可以传递它,但现在调用delete[] pIndex;时遇到问题。
什么是正确的?
【问题讨论】:
标签: visual-c++ mfc unique-ptr clistbox