あなたのコードは、そのままではリークしません(他の人がすでに言っているように)。ただし、壊れて漏れる可能性はほとんどありません。
int* test()
{
int* x = new int(5);
return x;
}
int main(int argc, char** argv)
{
int* y = test();
int* z = test();
delete y;
delete z;
return 0;
}
このコードは、スローされる可能性があるため、リークする可能性があります。 ( )new
への 2 番目の呼び出しがスローされると、最初のポインター ( ) は決して削除できません。スローできる他の関数 ( への 2 回目の呼び出しだけでなく) も、同じ問題を引き起こします。new
z=...
y
new
これが、スマート ポインターが必須である理由です。スマート ポインターは RAII を使用し、適切な C++ の基礎である例外セーフ コードを記述できるようにします。このコードは単にリークすることはありません:
std::unique_ptr<int> test()
{
std::unique_ptr<int> x(new int(5));
return x;
}
int main(int argc, char** argv)
{
std::unique_ptr<int> y = test();
std::unique_ptr<int> z = test();
return 0;
}