[英]How can i handle shared_ptr ++
int main ()
{
shared_ptr<int[]> a(new int[2]);
a.get()[0] = 5;
a.get()[1] = 10;
int* foo = a.get();
++foo;
cout << *foo << endl;
return 0;
}
正如我所料,輸出是“10”。 但是我使用了常規指針 (int* foo) 如何僅使用 shared_ptr 實現/使用 ++ 運算符。
您嘗試做的事情在語義上毫無意義。 shared_ptr 表達了擁有某物的意圖(在這種情況下是兩個 int 的數組)。 它所做的只是跟蹤所有權。 如果你增加一個shared_ptr,這是否意味着你釋放了第一個int的所有權? 或者這是否意味着您擁有第二個 int 兩次? 無論哪種方式都不是你想要做的。
通常,僅將 unique_ptr/shared_ptr 用於所有權問題。 要直接操作和使用內存,請使用視圖類,例如span 。 並非所有編譯器都具有此功能,因此可能必須使用GSL 庫或編寫自己的庫。 無論您如何實現它,最好創建一個單獨的對象來查看該對象,但不聲稱擁有它。 如果您可以將數組的長度與指針聯系起來,那就更好了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.