Cześć,
Czy w takiej sytuacji jak tu mam możliwość użycia jakiegoś smart pointera? Tworzę tutaj wskaźnik do obiektu pewnej klasy a potem jego adres wysyłam do funkcji w której tworzony jest dynamicznie obiekt a jego adres zapisywany jest do wskaźnika tak że mam go po wyjściu z tej funkcji.
Potem jest jakiś kod który operuje na tym wskaźniku i trzeba zwolnić pamięć. Tylko jak funkcja ma kilka ścieżek wyjścia to muszę w każdym miejscu zadbać o zwolnienie pamięci.
Problem w tym że ta funkcja getObject należy do zewnętrznej biblioteki dll i nie mogę zmienić jej interfejsu. Czyli nie mogę zmienić argumentu aby był to inny typ niż zwykły wskaźnik.
To co bym chyba chciał to to aby wraz z końcem życia zmiennej wskaźnikowej była też zwalniana pamięć na jaką wskazuje ten wskaźnik.
Przykładowy kod:
main()
{
myClass* myClasspointer = NULL;
getObject(&myClasspointer )
switch( condition)
{
case 1:
myClasspointer ->fun1();
if (myClasspointer);
delete myClasspointer;
return 1;
case 2:
myClasspointer ->fun2()
if (myClasspointer)
delete myClasspointer;
return 2;
case 3
myClasspointer ->fun3()
break;
default:
break;
}
if (myClasspointer)
delete myClasspointer;
return 0;
}