代码之家  ›  专栏  ›  技术社区  ›  intrigued_66

在不绕过共享语义的情况下,通过引用传输向量

  •  4
  • intrigued_66  · 技术社区  · 6 年前

    我有一个包含 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;
    };
    

    然后我执行以下操作:

    LargeLift b;
    {
        LargeLift a;
        // Gets populated
    
        SharedItems& items = a.getItems();
        b.setSharedItems(items);
    }
    
    // Variable a is now out of scope
    
    SharedItems& items2 = b.getItems();
    

    最后一行有效吗,给定 a 超出范围了吗?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Eric    6 年前

    a

    LargeLift b;
    {
        LargeLift a;
        // Gets populated
    
        SharedItems& items = a.getItems();
    
        //give b its own copy
        b.setSharedItems(items);
    }
    
    // safe, because b owns its own copy
    SharedItems& items2 = b.getItems();
    

    SharedItems* p_items;
    
    LargeLift b;
    {
        LargeLift a;
        // Gets populated
    
        items = &a.getItems();
    }
    
    // unsafe, items is already dangling
    b.setSharedItems(*p_items);
    
    SharedItems& items2 = b.getItems();
    
        2
  •  4
  •   user4581301    6 年前

    setSharedItems SharedItems _items; _items = items; items _items a._items b._items b a shared_ptr

        3
  •  1
  •   Hui    6 年前

    _item = item