簡體   English   中英

怎么可以實現observer_ptr?

[英]How could one implement an observer_ptr?

我想在我的項目中使用observer_ptr ,但本文只定義了接口,而不是完整的實現。

有沒有一種簡單的方法可以自己實現它?

您可以通過創建帶有NOP刪除器的unique_ptr來輕松創建所謂的observer_ptr

template<typename T>
struct nop_deleter
{
  void operator()(T*) const {}
};

template<typename T>
using observer_ptr = unique_ptr<T, nop_deleter>;

這仍然會有unique_ptr的行為,這意味着它只是移動的,而你希望observer_ptr是可復制的。 這使我們更簡單的實現:

template<typename T>
using observer_ptr = T*;

這可以做你想要的一切。 您可以將其稱為observer_ptr<int>而不是int * ,因為后者當然是邪惡的。 它是可復制的,在破壞時什么都不做。


我在上面的答案中很滑稽,但希望,它會證明除了具有與原始指針類型不同的名稱之外, observer_ptr沒有多少實用性。 使用非擁有原始指針沒有任何問題

您可能會認為observer_ptr傳達了intent,但只有當您的代碼庫包含管理資源的原始指針實例時,該參數才有效。 消除那些,然后原始指針將自動意味着observer_ptr ...沒有花哨的名稱。


如果你絕對必須擁有花哨的名字和/或一個獨特的類型,那么自己實現它應該很容易。

暫無
暫無

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

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