有一个weak_ptr的向量,想要返回一个shared_ptr的向量

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_ptrlock()在我使用它们的任何地方使用它?

rod*_*igo 1

关于什么:

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)

以避免复制返回向量。