我寫了一個shared_ptr,類的定義如下:
template <typename T>
class shared_ptr {
private:
...
public:
shared_ptr(T* p)。
shared_ptr(shared_ptr& src)。
shared_ptr& operator=(shared_ptr const& src)。
};
shared_ptr<T> make_shared(Args&& ... args) {
return shared_ptr<T>(new T(std::forward< Args> (args) ...) 。)
}
//函式呼叫:
shared_ptr<int> a = make_shared<int> (1)。
它不能作業,而且編譯器錯誤我說
non-const lvalue reference to type shared_ptr<> cannot bind to rvalue of type shared_ptr<>
我添加了一個rvalue的拷貝建構式:
template <typename T>
shared_ptr(shared_ptr& & src) {
print("rvalue"/span>)。
}
但沒有列印出任何陳述句。
我的環境是Visual studio 2019和MSVC 。
如果我的rvalue復制建構式沒有被執行,為什么在沒有rvalue復制建構式的時候會出錯?(我想這是一個RVO,但似乎不是)
謝謝大家的幫助。
謝謝大家的回答和評論,我下次一定要學會回答好問題。
uj5u.com熱心網友回復:
問題是你的復制建構式由于某種原因接受了一個非const的lvalue參考,它不能系結到一個rvalue。只要把它變成const:
shared_ptr(shared_ptr const& src) noexcept。
而移動建構式就不需要了。然而,無論如何,實作移動建構式/賦值是一個好主意,以避免無意義地顛覆參考計數器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314139.html
標籤:
