您好,登錄后才能下訂單哦!
本篇內容主要講解“C++怎么使用T*或T&參數”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++怎么使用T*或T&參數”吧!
對于通常的使用場景,應該使用T*或T&參數而非智能指針。
Reason(原因)
傳遞一個智能指針來轉交或分享所有權的方式應該只在希望表現所有權語義時使用(參見R.30)。通過智能指針傳遞參數限定了只有使用智能指針的調用者才能使用該函數。傳遞共享智能指針(例如,std::shared_ptr)必然包含運行時代價。
譯者注:代價包括但并不限于管理引用計數
Example(示例)
// accepts any int*
void f(int*);
// can only accept ints for which you want to transfer ownership
void g(unique_ptr<int>);
// can only accept ints for which you are willing to share ownership
void g(shared_ptr<int>);
// doesn't change ownership, but requires a particular ownership of the caller
void h(const unique_ptr<int>&);
// accepts any int
void h(int&);
// calleevoid f(shared_ptr<widget>& w){ // ... use(*w); // only use of w -- the lifetime is not used at all // ...};
See further in R.30.
Note(注意)
We can catch dangling pointers statically, so we don't need to rely on resource management to avoid violations from dangling pointers.
我們可以靜態捕捉懸空指針,因此不需要依靠資源管理來避免發生懸空指針違反。
譯者注:懸空指針是指指向已經釋放的內存的指針;野指針是沒有初始化的指針。
See also:(參考)
Prefer T*
over T&
when "no argument" is a valid option
當沒有參數是有效選項時應該使用T*而不是T&
Smart pointer rule summary
智能指針使用概括
譯者注:反過來,當不希望參數為空是可以使用T&。
Flag a parameter of a smart pointer type (a type that overloads operator->
or operator*
) for which the ownership semantics are not used; that is
標記不包含所有權語義的智能指針類型參數(重載了->和*運算符的類型);即
copyable but never copied/moved from or movable but never moved
可復制但是從來沒有被復制或移動或者可移動卻從來沒有移動
and that is never modified or passed along to another function that could do so.
內容從未被修改或者沒有傳遞給可以修改其內容的函數。
到此,相信大家對“C++怎么使用T*或T&參數”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。