#include<iostream>
class myClass
{
private:
int val;
public:
myClass () = delete;
myClass (int val):val
{
val}
{
}
int get () const
{
return val;
}
};
bool
ifEqualMake (int a, int b, myClass * obj)
{
if (a == b)
{
obj = new myClass (a);
}
else
{
std::cout << "Difference exists: " << a - b << '\n';
// Uncommenting the below line makes the whole thing work!
obj = new myClass (a + b);
}
std::cout << " Object made with value :" << obj->get () << '\n';
return (a == b);
}
int
main ()
{
myClass *obj1 = nullptr;
myClass *obj2 = nullptr;
myClass *obj3 = nullptr;
ifEqualMake (3, 3, obj1);
ifEqualMake (4, 3, obj2);
ifEqualMake (4, 4, obj3);
if(obj1) std::cout << "obj 1 made in heap: " << obj1->get () << '\n';
// I would expect ONLY this to be error
// std::cout<<"obj 2 made in heap: "<<obj2->get()<<'\n';
//
if(obj3) std::cout << "obj 3 made in heap: " << obj3->get () << '\n';
delete obj1;
delete obj3;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CgpjbGFzcyBteUNsYXNzCnsKcHJpdmF0ZToKICBpbnQgdmFsOwpwdWJsaWM6CiAgICBteUNsYXNzICgpID0gZGVsZXRlOwogICAgbXlDbGFzcyAoaW50IHZhbCk6dmFsCiAgewogIHZhbH0KICB7CiAgfQogIGludCBnZXQgKCkgY29uc3QKICB7CiAgICByZXR1cm4gdmFsOwogIH0KfTsKCmJvb2wKaWZFcXVhbE1ha2UgKGludCBhLCBpbnQgYiwgbXlDbGFzcyAqIG9iaikKewogIGlmIChhID09IGIpCiAgICB7CiAgICAgIG9iaiA9IG5ldyBteUNsYXNzIChhKTsKICAgICAKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHN0ZDo6Y291dCA8PCAiRGlmZmVyZW5jZSBleGlzdHM6ICIgPDwgYSAtIGIgPDwgJ1xuJzsKICAgICAgLy8gVW5jb21tZW50aW5nIHRoZSBiZWxvdyBsaW5lIG1ha2VzIHRoZSB3aG9sZSB0aGluZyB3b3JrIQogICAgICBvYmogPSBuZXcgbXlDbGFzcyAoYSArIGIpOwogICAgfQogIHN0ZDo6Y291dCA8PCAiIE9iamVjdCBtYWRlIHdpdGggdmFsdWUgOiIgPDwgb2JqLT5nZXQgKCkgPDwgJ1xuJzsKICByZXR1cm4gKGEgPT0gYik7Cn0KCmludAptYWluICgpCnsKICBteUNsYXNzICpvYmoxID0gbnVsbHB0cjsKICBteUNsYXNzICpvYmoyID0gbnVsbHB0cjsKICBteUNsYXNzICpvYmozID0gbnVsbHB0cjsKCgogIGlmRXF1YWxNYWtlICgzLCAzLCBvYmoxKTsKICBpZkVxdWFsTWFrZSAoNCwgMywgb2JqMik7CiAgaWZFcXVhbE1ha2UgKDQsIDQsIG9iajMpOwoKICBpZihvYmoxKSBzdGQ6OmNvdXQgPDwgIm9iaiAxIG1hZGUgaW4gaGVhcDogIiA8PCBvYmoxLT5nZXQgKCkgPDwgJ1xuJzsKCiAgLy8gSSB3b3VsZCBleHBlY3QgT05MWSB0aGlzIHRvIGJlIGVycm9yCiAgLy8gc3RkOjpjb3V0PDwib2JqIDIgbWFkZSBpbiBoZWFwOiAiPDxvYmoyLT5nZXQoKTw8J1xuJzsKICAvLwogIGlmKG9iajMpIHN0ZDo6Y291dCA8PCAib2JqIDMgbWFkZSBpbiBoZWFwOiAiIDw8IG9iajMtPmdldCAoKSA8PCAnXG4nOwoKICBkZWxldGUgb2JqMTsKICBkZWxldGUgb2JqMzsKCiAgcmV0dXJuIDA7Cgp9Cg==