C++ (Qt)try { data.ref = new MyClass(id, type);}catch (...) { delete data.ref; data.ref = 0;}
#include <iostream>struct MyClass{ MyClass(int, int) { throw 1; } };int main(){ std::cout << "Hello, world!\n"; MyClass* ptr = nullptr; const int id = 1; const int type = 1; try { auto* ptr = new MyClass(id, type); } catch (...) { std::cout<<"address = "<< ptr<<std::endl; }}
try { //вылетает исключение, и data.ref остается без изменений //в вашем случае вероятно он содержит какой то мусор data.ref = new MyClass(id, type);}catch (...) { // вот здесь вы пытаетесь удалить память, которая не была выделена // и получаете от системы по заднице delete data.ref; data.ref = 0;}
// вот здесь вы пытаетесь удалить память, которая не была выделена // и получаете от системы по заднице
C++ (Qt)data.ref = new MyClass(id, type);
C++ (Qt)MyClass * MyClass::Instance( void ){ if (!mInstance) { QMutexLocker lock(&mutex); if (!mInstance) mInstance = new MyClass; } return mInstance;}
try{ auto* p = new some;}catch(...) { //ну и как теперь прикажите теперь ловить утечки???}