Klasik C++ pointer tanımlama ve yok etme (silme)
void FuncMightLeak()
{
MyType* pFirst = new MyType();
if (!process())
{
delete pFirst;
return;
}
MyType* pSecond = new MyType();
if (!processSecond())
{
delete pFirst;
delete pSecond;
return;
}
process();
delete pFirst;
delete pSecond;
}
Yeni nesil C++ derleyiciler (c++ 17 >=) smart pointer ile tanımlamayı daha basitleştirdiği gibi silme işlemleriylede ilgili kod bloklarını ortadan kaldırıyor zira return (kod bitişi sonrası) pointer değişkenler otomatik olarak kaldırılıyor.
void FuncNoLeaks()
{
auto pFirst = std::make_unique<MyType>();
if (!process())
return;
auto pSecond = std::make_unique<MyType>();
if (!processSecond())
return;
process();
}
Smart pointer: std::make_unique, std::make_shared, std::unique_ptr, std::shared_ptr
------------- http://www.kasatakip.com - Kasa Takip | http://www.caritakip.com - Cari Takip | http://www.evraktakip.com - Evrak Takip | http://www.etasqlmobil.com - ETA SQL Mobil
|