bla*_*esa 6 c++ boost vector shared-ptr weak-ptr
我目前正在开展一个大项目,我需要使用weak_ptr而不是shared_ptr.
这是我的问题.
我有一个名为House的类,其属性为:vector<boost::shared_ptr<People>> my_people.我想修改这个数据成员vector<boost::weak_ptr<People>> my_people.
我的吸气鬼是
vector<boost::shared_ptr<People>>& getPeople() const
{
return my_people;
}
Run Code Online (Sandbox Code Playgroud)
通常,简单的weak_ptr我可以返回my_people.lock();
但我有一个矢量,我不知道如何做这样的事情:
vector<boost::shared_ptr<People>>& getPeople() const
{
for( vector<boost::weak_ptr<People>::iterator it = my_people.begin();
it != my_people.end();
++it)
{
(*it).lock();
}
return my_people;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我想返回我的矢量,weak_ptr但作为矢量shared_ptr.可能吗?或者我必须返回一个矢量weak_ptr并lock()在我使用它们的任何地方使用它?
关于什么:
vector<boost::shared_ptr<People>> getPeople() const
{
vector<boost::shared_ptr<People>> res;
for( vector<boost::weak_ptr<People>::iterator it = my_people.begin();
it != my_people.end(); ++it)
res.push_back(it->lock());
return res;
}
Run Code Online (Sandbox Code Playgroud)
另外,如果需要,您可以过滤掉空指针。
当然,您不能返回对局部变量的引用,因此您必须返回一个副本。您可能想要这样做:
void getPeople(vector<boost::shared_ptr<People>> &res) const
{
for( vector<boost::weak_ptr<People>::iterator it = my_people.begin();
it != my_people.end(); ++it)
res.push_back(it->lock());
}
Run Code Online (Sandbox Code Playgroud)
以避免复制返回向量。
| 归档时间: |
|
| 查看次数: |
3596 次 |
| 最近记录: |