[英]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.