簡體   English   中英

C ++ boost :: shared_ptr運算符[]詳細信息

[英]C++ boost::shared_ptr operator[] details

Boost文檔說

從Boost 1.53版本開始,shared_ptr可用於保存指向動態分配數組的指針。

我有一個簡單的類,並使用boost::shared_ptr在其中保存std::deque數組:

boost::shared_ptr<std::deque<uint32_t> []> someArray;

我想有一種方法可以從數組中返回指定的雙端隊列,以進行只讀:

std::deque<uint32_t> MyClass::myMethod(boost::uint32_t arrayIndex) const{            
        return someArray[arrayIndex];
}

這種方法不違反對象的恆定性嗎?

這種方法不違反對象的恆定性嗎?

不,是的 也許。 顯然,它不會影響語法恆定性,因為編譯器不會抱怨。 這是因為語法恆定性要求對象及其成員(在這種情況下,尤其是智能指針)必須是const。 不需要指針對象(即雙端的陣列)為常量。
語義一致性是另一回事。 如果數組屬於您的對象,則更改數組意味着更改對象,而使對象為const則意味着不更改數組。 由您來強制執行語義常量而不是語法常量。 但是,在這種情況下,我不會使用shared_ptr而是使用std::vector ,因為它表示單一所有權,而shared_ptr是共享所有權-顯然。 另外, std::vector旨在實現語義一致性,這意味着庫實現者將包含的元素強制為const向量中的const。
但是,由於我不知道您的類和雙端隊列的上下文,並且由於您顯式地使用shared_ptr ,所以意味着共享所有權, 也許您需要語義常量,也許不需要。

但是由於您說過要只讀訪問並按值返回,所以該訪問不會更改數組的內容,所以您可能會很好。 通過const引用返回也可以滿足您的需要,而且還避免了不必要的臨時副本,這取決於出隊存儲的對象數量可能非常昂貴

暫無
暫無

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

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