Ich habe folgenden Codeundefined Verhalten zu rohen Zeiger von einem gelöschten shared_ptr zu verwenden?
#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?
}
die letzten beiden Aussagen sicher sind?
Ich kann es http://cpp.sh/6poh mit output "10", ausführen, aber wird es erwartet? oder nur ein undefiniertes Verhalten?
'assert (* p_src = * p_again);' - Sind Sie sicher, dass es nicht '==' hier sein sollte? – yeputons
Fehler behoben, danke – elgcom
Sie können Zeiger auf nicht vorhandene Objekte nicht de-Referenzieren, also nicht, nicht sicher. – juanchopanza