#include <iostream>
#include <memory>
template <typename T>
std::shared_ptr<T> OwnedPtr(T* object)
{
return {object, [] (T*) {}};
}
int main() {
std::shared_ptr<int> ptr;
// some condition (dans ton code)
int global_permanent_value = 456;
if (true)
ptr = std::make_shared<int>(123);
else
ptr = OwnedPtr(&global_permanent_value);
std::cout << *ptr << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0ZDo6c2hhcmVkX3B0cjxUPiBPd25lZFB0cihUKiBvYmplY3QpCnsKCXJldHVybiB7b2JqZWN0LCBbXSAoVCopIHt9fTsKfQoKaW50IG1haW4oKSB7CglzdGQ6OnNoYXJlZF9wdHI8aW50PiBwdHI7CgoJLy8gc29tZSBjb25kaXRpb24gKGRhbnMgdG9uIGNvZGUpCglpbnQgZ2xvYmFsX3Blcm1hbmVudF92YWx1ZSA9IDQ1NjsKCglpZiAodHJ1ZSkKCQlwdHIgPSBzdGQ6Om1ha2Vfc2hhcmVkPGludD4oMTIzKTsKCWVsc2UKCQlwdHIgPSBPd25lZFB0cigmZ2xvYmFsX3Blcm1hbmVudF92YWx1ZSk7CgoJc3RkOjpjb3V0IDw8ICpwdHIgPDwgc3RkOjplbmRsOwoJCglyZXR1cm4gMDsKfQ==