【发布时间】:2019-06-30 22:22:11
【问题描述】:
我试图了解如何将 C++ 软件上的原始指针替换为智能指针。
我有以下代码:
class Foo
{
private:
std::vector<Bar *> m_member;
};
现在在某个函数中,我使用以下内容填充该向量:
m_member.push_back( new Bar() );
当我的程序完成时,我删除内存:
for( std::vector<Bar *>::iterator it = m_member.begin(); it < m_member.end(); ++it )
{
delete (*it);
(*it) = NULL;
}
现在这一切都很好。
问题在于我看到它来自这样一个事实,即在某个时间点我可能需要从向量中删除一个成员(该成员是用户指定的)。
现在这很容易:
for(...)
{
if( (*it)->GetFieldFromBar() == <user_specified_condition> )
{
delete (*it);
(*it) = NULL;
}
}
但是我如何用智能指针重写它呢?有可能吗?
【问题讨论】:
-
你试过什么?将
std::vector<Bar *> m_member;更改为std::vector<std::unique_ptr<Bar>> m_member;应该很容易。然后,如果您需要删除一个元素,您只需erase即可。 -
(在这种情况下,我实际上会使用 unique_ptr 而不是 shared_ptr)。
-
为什么要指针,
std::vector<Bar >还不够吗?
标签: c++ c++11 pointers smart-pointers