有Entity
對象的唯一擁有者 - EntityManager
。是否應該從unique-owner-collection返回weak_ptr或shared_ptr?
class EntityManager
{
public:
std::weak_ptr<Entity> vs std::shared_ptr<Entity> getEntityByID(int ID) const;
private:
std::vector<std::shared_ptr<Entity>> entities;
};
當Entity
是需要在程序中被使用,它被從EntityManager
通過使用getEntityByID
功能接收。
Entity
不應該被存放在程序爲shared_ptr
其他地方,因爲EntityManager
是唯一的擁有者,但它可以與存儲在許多地方爲weak_ptr
。
我的問題是,如果,getEntityByID
應該返回weak_ptr
或shared_ptr
我的論點使用weak_ptr
的返回值:
- 正是在getEntityByID函數簽名清楚地表明瞭weak_ptr應該讓實體後使用。
我的論點使用shared_ptr
的返回值:
weak_ptr
反正可以轉換爲shared_ptr
,並且可以存儲然後根據在其他地方shared_ptr
。從理論上講,每次使用它都會使用lock
函數將其轉換爲shared_ptr。- 當使用
shared_ptr
時,那麼在每個功能中,它只能通過shared_ptr
。在每次使用ptr時都不需要使用lock
函數。如果它決定存儲指針 ,那麼它只會將其作爲數據成員複製到weak_ptr。
如果'EntityManager'是唯一的所有者,爲什麼不有'std :: vector'並返回引用? –
你爲什麼使用共享/弱指針?調用者可能會在資源被刪除後嘗試使用指針嗎? – Galik
或向量的唯一指針並返回借來的原始指針。 – Flexo