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