2017-02-15 60 views
1

,我們從C++ 11幸運地擁有一個相當完整的智能指針類型:實用代碼友好的名稱,非智能擁有指針

  • 的std :: shared_ptr的
  • 的std :: weak_ptr的
  • 的std ::的unique_ptr
  • 的std :: auto_ptr的(不建議使用)

但缺少的是一個聰明的指針沒有所有權,蒙山綜合以上。

這似乎將開發人員的討論帶入了一個有點鬆散的分類,通常有這樣的詞組,如'非擁有智能指針'。但是這不是我想用於命名我的代碼中的指針包裝器模板的好名字。

對於非擁有智能指針有更好的代碼友好名稱有什麼建議嗎?

template<typename T> 
struct NonOwningSmart_pointer; 

存在std :: weak_ptr,它不能滿足需求,因爲它需要shared_ptr。

更新:唯一地命名這種類型的智能指針的主要好處是代碼清晰,構造爲nullptr並與其他std指針類型一起正常播放。

+4

弱指針與「NonOwningSmart_pointer」有什麼不同? –

+0

據我所知,std :: weak_ptr總是與std :: shared_ptr關聯。但有std :: unique_ptr,也是原始的。 – Jojje

+2

爲什麼你首先需要非擁有智能指針?與普通指針相比有什麼好處? – SergeyA

回答

4

甚至有這樣的事情的建議: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4282.pdf

在那裏,它被命名爲「observer_ptr」。
該提案被拒絕,但最近在Boost郵件列表中討論了同樣的想法(有一些更積極的反饋)。

+0

業主和觀察員,這個中間地帶弱。是的,我認爲我喜歡它,迄今爲止最好。 – Jojje

+3

「N4282:世界上最笨的智能指針v4」的提議 - 標題是我的一天;) – PiotrNycz

1

C++核心指南似乎建議對非擁有指針使用原始指針。我想,從技術上講,他們說使用智能指針來表示所有權,並假設原始指針是非擁有的。我想這並不排除對非擁有指針使用智能指針,但我不知道會提供什麼優勢。

+1

好處是,您看到指針並立即知道它是非擁有的。如果它只是'T *',那麼你必須檢查代碼或文檔以找出答案。 –

+0

並非所有的原始指針都是關於對象的生命週期和所有權。我總是使用某種類型來清除指針所處的角色。 – Jojje

+0

@ChristianHackl:如果遵循核心準則,則不適用。如果你看到一個'T *',那麼你知道它是一個非擁有指針。 –