簡體   English   中英

運算符 -> 或 ->* 應用於“const std::weak_ptr”而不是指針類型C/C++

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM