簡體   English   中英

C ++依賴注入 - 通過引用或通過boost :: shared_ptr?

[英]C++ dependency injection - by reference or by boost::shared_ptr?

在需要的構造函數依賴注入的情況下,什么是使用注射用的參考與使用boost :: shared_ptr的考慮?

還有另一種常見的做法嗎? 它與上述兩種方法相比如何?

您可以選擇如何管理要注入的對象的生命周期。 整體架構可能會決定哪種選擇最有意義。 有了參考,更高層次的東西必須管理對象的生命周期; 使用shared_ptr ,將自動管理生命周期。

以前我用過這兩種方法。

使用共享指針方法的優點意味着您可以將注入的依賴項的所有權傳遞給使用者。

如果使用基於引用的方法,則注入依賴項的破壞更具確定性。 即,一旦消費者中的所有處理完成,就會發生這種情況。

我記得看過一些使用unique_ptr (或者auto_ptr )的代碼。 這似乎比“通過引用”更好:不需要管理注入對象的所有權。 這可能比使用shared_ptr更快:不涉及引用計數。 這可能更令人困惑:它涉及所有權的轉移,而auto_ptr有一些陷阱。

你需要問自己的問題是:誰擁有這個對象? 在典型的DI場景中,它是消費者對象。 在這種情況下,我會將一個原始指針傳遞給構造函數並將其存儲為類似unique_ptr東西。 如果所有權是共享的或不明確的,那么當然要使用shared_ptr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM