[英]operator -> or ->* applied to "const std::weak_ptr" instead of to a pointer typeC/C++
在 lambda function 中,我試圖使用 weak_ptr 來訪問所有成員 function 和變量。 收到此錯誤
運算符 -> 或 ->應用於“const std::weak_ptr”而不是指針類型C/C++ *
std::weak_ptr<T>
按設計安全地指代可能存在或不存在的 object。 它不提供operator->
或operator*
,因為您必須確保 object 仍然存在,然后才能嘗試訪問它。
要訪問由std::weak_ptr
引用的 object,您首先調用lock()
,它返回std::shared_ptr
。 然后,您需要檢查std::shared_ptr
是否引用了 object。 如果是這樣,那么 object 是可以安全訪問的,並且在返回的指針被銷毀之前不會被刪除(因為它仍然存在一個std::shared_ptr
)。 如果不是,則std::weak_ptr
指的是您無法再訪問的已損壞 object 。
示例:
#include <memory>
class foo
{
public:
void bar(){}
};
void test(std::weak_ptr<foo> ptr)
{
// Get a shared_ptr
auto lock = ptr.lock();
// Check if the object still exists
if(lock)
{
// Still exists, safe to dereference
lock->bar();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.