通过引用传输向量<shared_ptr <T >>而不绕过共享语义

mez*_*hic 3 c++ smart-pointers shared-ptr c++11

我有一堂课,其中包含vector<shared_ptr<T>>

using SharedItems = std::vector<std::shared_ptr<Item>>;

class LargeLift
{
public:
    SharedItems& getItems()
    {
        return _items;
    }

    void setSharedItems(SharedItems& items)
    {
        _items = items;
    }

private:
    SharedItems _items;
};
Run Code Online (Sandbox Code Playgroud)

然后,我执行以下操作:

LargeLift b;
{
    LargeLift a;
    // Gets populated

    SharedItems& items = a.getItems();
    b.setSharedItems(items);
}

// Variable a is now out of scope

SharedItems& items2 = b.getItems();
Run Code Online (Sandbox Code Playgroud)

给定a超出范围,最后一行是否有效?

use*_*301 5

该代码将引用传递到setSharedItems,但SharedItems _items;不是引用,因此将_items = items;拷贝items_itemsa._items与有所不同b._items,所以淡出b后就可以a了。由于已b复制了所有shared_ptrs,因此引用计数尚未达到零,并且所有指针仍将是好的。