簡體   English   中英

使用已刪除的shared_ptr中的原始指針的未定義行為?

[英]undefined behaviour to use raw pointer from a deleted shared_ptr?

我有以下代碼

#include <iostream>
#include <memory>
#include <cassert>

int main()
{
    void* p_any = nullptr;

    {
        auto  p_src = std::make_shared<int>(10); // new instance        
        p_any = p_src.get();                     // get raw unmanaged pointer?
        auto  p_again = reinterpret_cast<int*>(p_any);
        assert(*p_src == *p_again);
    }

    auto  p_again = reinterpret_cast<int*>(p_any); // ??
    std::cout << *p_again <<  "\n";                // undefined?, expected?

}

最后兩個語句安全嗎?

我可以在沒有“ 10”的情況下運行它http://cpp.sh/6poh ,但這是預期的嗎? 還是只是未定義的行為?

p_src對象用p_src大括號超出了范圍,並且由於沒有其他共享指針實例,所包含的指針將被刪除。 因此, p_any將指向已刪除的數據,並且您確實會有未定義的行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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